<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/57157>57157</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            clang static analyzer produces invalid externalDefMap.txt file during CTU analysis
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          tomrittervg
      </td>
    </tr>
</table>

<pre>
    I am running clang static analyzer via CodeChecker with CTU analysis on Firefox (so it's a big project.)  I am running into errors because it seems to generate an invalid externalDefMap and spits out the following error during the CodeChecker run:

> error: error parsing index file: 'blah/ctu-analysis/reports/ctu-dir/x86_64/externalDefMap.txt' line: 2283 '<USR-Length>:<USR> <File-Path>' format expected

When I grab the externalDefMap file while it is running (because it disappears after completion) and I look for bad lines I have the following:

```
$ cat bad-externalDefMap.txt | egrep -e "^([0-9]+):[a-z]:([^ ]+) ([^ ]+)$" -v > bad-lines.txt
$ wc -l bad-lines.txt 
314 bad-lines.txt
$ wc -l bad-externalDefMap.txt 
204168 bad-externalDefMap.txt
```

The externalDefMap.txt is ~36MB so I'm not attaching the whole thing, but here is a sample of the bad lines:

```
59:c:@S@nsBoxFrame@F@operator ast/new#l#*$@N@mozilla@S@PresShell#S /home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
97:c:@N@mozilla@S@nsDisplayXULEventRedirector@F@operator ast/new#l#*$@N@mozilla@S@nsDisplayListBuilder#S /home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
153:c:@N@icu_71@S@UnicodeSet@F@applyPattern#&$@N@icu_71@S@RuleCharacterIterator#*1$@N@icu_71@S@SymbolTable#&$@N@icu_71@S@UnicodeString#i# ast/#I#&$@E@UErrorCode# /home/tom/Documents/moz/static-analysis/mozilla-unified/intl/icu/source/common/uniset_props.cpp.ast
80:c:@S@nsComputedDOMStyle@F@GetNonStaticPositionOffset#$@N@mozilla@E@Side#b# ast/#S1_# /home/tom/Documents/moz/static-analysis/mozilla-unified/layout/style/nsComputedDOMStyle.cpp.ast
47:c:@N@mozilla@S@SPSNALIterator@F@operator ast/bool#1 /home/tom/Documents/moz/static-analysis/mozilla-unified/dom/media/platforms/agnostic/bytestreams/H264.cpp.ast
69:c:@S@nsDocElementBoxFrame@F@operator ast/new#l#*$@N@mozilla@S@PresShell#S /home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsDocElementBoxFrame.cpp.ast
```

and some good lines:

```
20:c:@F@jpeg_fdct_ifast ast/home/tom/Documents/moz/static-analysis/mozilla-unified/media/libjpeg/jfdctfst.c.ast
19:c:@F@ArrayString#i# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/gfx/angle/checkout/src/common/angleutils.cpp.ast
67:c:@F@ArrayIndexString#&1$@N@std@S@vector>#i#$@N@std@S@allocator>#i# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/gfx/angle/checkout/src/common/angleutils.cpp.ast
95:c:@F@FormatStringIntoVector#*1C#*$@S@__va_list_tag#&$@N@std@S@vector>#C#$@N@std@S@allocator>#C# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/gfx/angle/checkout/src/common/angleutils.cpp.ast
23:c:@N@angle@DirtyPointer ast/home/tom/Documents/moz/static-analysis/mozilla-unified/gfx/angle/checkout/src/common/angleutils.cpp.ast
62:c:@N@mozilla@N@dom@S@PrefValue@F@operator=#&1$@S@nsTString>#C# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/objdir/ipc/ipdl/PrefsTypes.cpp.ast
```

Following are three examples of a bad line (prefaced with BAD> added by me of course) surrounded by good lines.  This is pure speculation but maybe it's a threading issue with a buffer; as the strings seem like it might be something with interleving? Some of the offending strings occur shortly later in the file...

```
39:c:@N@js@N@wasm@S@WasmFrameIter@F@done#1 ast/home/tom/Documents/moz/static-analysis/mozilla-unified/js/src/wasm/WasmFrameIter.cpp.ast
104:c:@N@js@N@wasm@F@GenerateFunctionEpilogue#&$@N@js@N@jit@S@MacroAssembler#i#*$@N@js@N@wasm@S@FuncOffsets# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/js/src/wasm/WasmFrameIter.cpp.ast
45:c:@N@js@N@wasm@S@WasmFrameIter@F@displayURL#1 ast/home/tom/Documents/moz/static-analysis/mozilla-unified/js/src/wasm/WasmFrameIter.cpp.ast
89:c:@N@js@N@wasm@S@ProfilingFrameIterator@F@ProfilingFrameIterator#*1$@N@js@N@wasm@S@Frame# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/js/src/wasm/WasmFrameIter.cpp.ast
84:c:@N@js@N@wasm@F@ClearExitFP#&$@N@js@N@jit@S@MacroAssembler#$@N@js@N@jit@S@Register# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/js/src/wasm/WasmFrameIter.cpp.ast
131:c:@N@js@N@wasm@F@GenerateExitEpilogue#&$@N@js@N@jit@S@MacroAssembler#i#$@N@js@N@wasm@S@ExitReason#*$@N@js@N@wasm@S@CallableOffsets# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/js/src/wasm/WasmFrameIter.cpp.ast
156:c:@N@js@N@wasm@F@GenerateFunctionPrologue#&$@N@js@N@jit@S@MacroAssembler#&1$@N@js@N@wasm@S@TypeIdDesc#&1$@N@mozilla@S@Maybe>#i#*$@N@js@N@wasm@S@FuncOffsets# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/js/src/wasm/WasmFrameIter.cpp.ast
50:c:@S@nsDocElementBoxFrame@F@~nsDocElementBoxFrame# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsDocElementBoxFrame.cpp.ast
BAD> 69:c:@S@nsDocElementBoxFrame@F@operator ast/new#l#*$@N@mozilla@S@PresShell#S /home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsDocElementBoxFrame.cpp.ast
97:c:@S@nsDocElementBoxFrame@F@nsDocElementBoxFrame#*$@N@mozilla@S@ComputedStyle#*$@S@nsPresContext# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsDocElementBoxFrame.cpp.ast
68:c:@S@nsDocElementBoxFrame@F@QueryFrame#$@S@nsQueryFrame@E@FrameIID#1 ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsDocElementBoxFrame.cpp.ast
45:c:@S@nsDocElementBoxFrame@F@IsFrameOfType#i#1 ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsDocElementBoxFrame.cpp.ast
111:c:@S@nsDocElementBoxFrame@F@CreateAnonymousContent#&$@S@nsTArray>#$@S@nsIAnonymousContentCreator@S@ContentInfo# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsDocElementBoxFrame.cpp.ast
99:c:@S@nsDocElementBoxFrame@F@DestroyFrom#*$@S@nsIFrame#&$@N@mozilla@N@layout@S@PostFrameDestroyData# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsDocElementBoxFrame.cpp.ast
35:c:@S@nsDocElementBoxFrame@kFrameIID ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsDocElementBoxFrame.cpp.ast
34:c:@S@nsDocElementBoxFrame@kClassID ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsDocElementBoxFrame.cpp.ast
63:c:@S@nsDocElementBoxFrame@F@GetFrameName#&$@S@nsTSubstring>#q#1 ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsDocElementBoxFrame.cpp.ast
86:c:@S@nsDocElementBoxFrame@F@AppendAnonymousContentTo#&$@S@nsTArray>#*$@S@nsIContent#i# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsDocElementBoxFrame.cpp.ast
40:c:@S@nsDocElementBoxFrame@F@GetFrameId#1 ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsDocElementBoxFrame.cpp.ast
84:c:@F@NS_NewDocElementBoxFrame#*$@N@mozilla@S@PresShell#*$@N@mozilla@S@ComputedStyle# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsDocElementBoxFrame.cpp.ast
```

```
84:c:@S@nsBoxFrame@F@RemoveFrame#$@N@mozilla@N@layout@E@FrameChildListID#*$@S@nsIFrame# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
90:c:@S@nsBoxFrame@F@AppendDirectlyOwnedAnonBoxes#&$@S@nsTArray>#$@S@nsIFrame@S@OwnedAnonBox# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
55:c:@S@nsBoxFrame@F@GetXULPrefSize#&$@S@nsBoxLayoutState# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
51:c:@S@nsBoxFrame@F@AttributeChanged#I#*$@S@nsAtom#I# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
128:c:@S@nsBoxFrame@F@InsertFrames#$@N@mozilla@N@layout@E@FrameChildListID#*$@S@nsIFrame#*1$@S@nsLineList_iterator#&$@S@nsFrameList# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
115:c:@S@nsBoxFrame@F@BuildDisplayListForChildren#*$@N@mozilla@S@nsDisplayListBuilder#&1$@N@mozilla@S@nsDisplayListSet# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
BAD> 97:c:@N@mozilla@S@nsDisplayXULEventRedirector@F@operator ast/new#l#*$@N@mozilla@S@nsDisplayListBuilder#S /home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
58:c:@S@nsBoxFrame@F@QueryFrame#$@S@nsQueryFrame@E@FrameIID#1 ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
95:c:@S@nsBoxFrame@F@SetInitialChildList#$@N@mozilla@N@layout@E@FrameChildListID#&$@S@nsFrameList# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
175:c:@N@mozilla@S@nsDisplayXULEventRedirector@F@HitTest#*$@N@mozilla@S@nsDisplayListBuilder#&1$@S@nsRect#*$@N@mozilla@S@nsDisplayItem@S@HitTestState#*$@S@nsTArray>#*$@S@nsIFrame# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
109:c:@S@nsXULEventRedirectorWrapper@F@WrapItem#*$@N@mozilla@S@nsDisplayListBuilder#*$@N@mozilla@S@nsDisplayItem# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
74:c:@N@mozilla@S@nsDisplayXULEventRedirector@F@~nsDisplayXULEventRedirector# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
55:c:@N@mozilla@S@nsDisplayXULEventRedirector@F@ItemType#S ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
104:c:@S@nsBoxFrame@F@BuildDisplayList#*$@N@mozilla@S@nsDisplayListBuilder#&1$@N@mozilla@S@nsDisplayListSet# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/layout/xul/nsBoxFrame.cpp.ast
```

```
96:c:@N@icu_71@S@UnicodeSet@F@applyFilter#*Fr(#I#*v)#S2_#*1$@N@icu_71@S@UnicodeSet#&$@E@UErrorCode# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/intl/icu/source/common/uniset_props.cpp.ast
83:c:@N@icu_71@S@UnicodeSet@F@UnicodeSet#&1$@N@icu_71@S@UnicodeString#&$@E@UErrorCode# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/intl/icu/source/common/uniset_props.cpp.ast
76:c:@N@icu_71@S@UnicodeSet@F@resemblesPattern#&1$@N@icu_71@S@UnicodeString#I#S ast/home/tom/Documents/moz/static-analysis/mozilla-unified/intl/icu/source/common/uniset_props.cpp.ast
84:c:@N@icu_71@S@UnicodeSet@F@resemblesPropertyPattern#&1$@N@icu_71@S@UnicodeString#I#S ast/home/tom/Documents/moz/static-analysis/mozilla-unified/intl/icu/source/common/uniset_props.cpp.ast
91:c:@N@icu_71@S@UnicodeSet@F@resemblesPropertyPattern#&$@N@icu_71@S@RuleCharacterIterator#I#S ast/home/tom/Documents/moz/static-analysis/mozilla-unified/intl/icu/source/common/uniset_props.cpp.ast
95:c:@N@icu_71@S@UnicodeSet@F@applyPropertyAlias#&1$@N@icu_71@S@UnicodeString#S0_#&$@E@UErrorCode# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/intl/icu/source/common/uniset_props.cpp.ast
BAD> 153:c:@N@icu_71@S@UnicodeSet@F@applyPattern#&$@N@icu_71@S@RuleCharacterIterator#*1$@N@icu_71@S@SymbolTable#&$@N@icu_71@S@UnicodeString#i# ast/#I#&$@E@UErrorCode# /home/tom/Documents/moz/static-analysis/mozilla-unified/intl/icu/source/common/uniset_props.cpp.ast
128:c:@N@icu_71@S@UnicodeSet@F@applyPropertyPattern#&$@N@icu_71@S@RuleCharacterIterator#&$@N@icu_71@S@UnicodeString#&$@E@UErrorCode# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/intl/icu/source/common/uniset_props.cpp.ast
38:c:@aN@F@uniset_getUnicode32Instance_71 ast/home/tom/Documents/moz/static-analysis/mozilla-unified/intl/icu/source/common/uniset_props.cpp.ast
81:c:@N@icu_71@S@UnicodeSet@F@applyIntPropertyValue#$@E@UProperty#I#&$@E@UErrorCode# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/intl/icu/source/common/uniset_props.cpp.ast
151:c:@N@icu_71@S@UnicodeSet@F@applyPatternIgnoreSpace#&1$@N@icu_71@S@UnicodeString#&$@N@icu_71@S@ParsePosition#*1$@N@icu_71@S@SymbolTable#&$@E@UErrorCode# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/intl/icu/source/common/uniset_props.cpp.ast
85:c:@N@icu_71@S@UnicodeSet@F@applyPattern#&1$@N@icu_71@S@UnicodeString#&$@E@UErrorCode# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/intl/icu/source/common/uniset_props.cpp.ast
26:c:@S@SuperBlitter@F@flush# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/gfx/skia/skia/src/core/SkScan_AntiPath.cpp.ast
34:c:@S@SuperBlitter@F@~SuperBlitter# ast/home/tom/Documents/moz/static-analysis/mozilla-unified/gfx/skia/skia/src/core/SkScan_AntiPath.cpp.ast
```


I am running only clangsa (not clang-tidy) passing `--timeout=60 -j 45` (among other options to certain checkers that are probably not relevant) to CodeChecker.  I'm running clang trunk: `clang version 16.0.0 (https://github.com/llvm/llvm-project.git 10a7ee0bac211810376f29a879a9f73ed2ab15fc)` and I'm using a compile_commands.json file that firefox can generate quite easily with the build command `./mach build-backend -b CompileDB`.  

If anyone would like to recreate this situation I can provide instructions for how to set up the environment and run it, but warning - it's slow (on the order of multiple hours on a very fast machine) and takes 150GB+ of disk space at a minimum. I can also self-host the full externalDefMap file or related.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztHNty4rjya8iLCgqb-0MeEgi7VGUyOSGzu2-UsGWsRFheSSZhvv50yzaxgRBg2CFz9lQFgi2p1Xd1y2pPpb-8HBE6JyqJIh7NiCcofGtDDfcIjahYfmeKLDglfemzfsi8Z7h-4SYk_cdvaQ_NNZERGXLFAvlKKm5XS8JNxe1oQsmUz0is5BPzTK3i9ggpzccjIwlTSipNpsyjiWYwlGjG5ppA04xFTFHDYCbou6CC-4S9GqZg4gELvtAYWnyiY24AicQQEzISSCHkC4K3kImfKLzApiIVgEOlcVWpDyr1_Ltxkw6B-9nYmCqdIuqzVxJwwbANaJsKGlbcoWeSas4FuFQslsrorMHnCn69dtuTdhN-lBGvmVfkERE8sjBdt9tAwJVG_9v4oXrLopkJASPE0d5C7ODXEHCo3tO0DcYHUs2pAa7EwGLmF-n5M2QR8Hum6NRSv8Y5pIa8hPgNPAcp5lIBERaE4XNN45gBIwgNAADx5DwWzHAZoUCR_yMipHxGVMiU-pYkDTdDumBliawzvF3P_tJLt0k8oAVgVDeZRSqdPmEzYDGpMsDRrbSAAd1K67pe7VVag4p7DfjgDK1rWv2Od-C37QA9yaoH2XIPZgaApLogyGWc39JgZbRC7cUjVVFuJGlrw2l-PGgbRbabW2867e47fbYzyn4_bojUAgVBVjo3jfaXawKGOAIdmZNIGkKNoV6YW8JLKAUKB4Xi9skUbCdkiuFoSjRFCRMZ2K4rke6WXgt572GfZn0Mn0hfy9ehonMGF0P4yBhtGXSEatD8YcReKm5DwKfiIqugxx185vI7F4JmQO4V0-OQCew2BskNQwnw3KGRc_geSC-Zs8gaHIyD79R1FU0yg1dNIh5wsA93KOgSXAVaZiIQjxWeNS-Oa4icpafXeaNnE7FID7iOAdRf325vFoDDAwNzBxME73E8uSuot1yb64QLn6mfT7nTapRJ514y6TgZjt8i7oEbHTOTEQreQSzBI6EmWvLab-SVRj4kArwvVRQclRqZlD0pQ5x3hoyX86kUj3QKjncX6Bwpo6xCNzh8MsbDr1Fx7A12v0HvjqsB9jsNc2EtQ6YCWjhAJspDiOAs5-goh9BRMzOBtTDWZXZ36-uG0wcPm4AzH3z9MjZLkRvQb8zcyWhscbmXmqML_hoEANbSt6lSSOqYWyKnJYaMncnpCF9plba4ol6tE1AmuLnTssb347ur25V6bDWmqZRoSc6JKPDt2DlYMIX_YH8GV1XsS2eR1DAe51wapo1i1Db87rabZaraG_4PkLkRDNH5VTzhJsZlGreuQzYCA2TITMq9Vgq3oPDIjqeYzSaB75kJD2CqjCsnoC-XqOBTnAN-PeE0gTY1r-DuemV0rpSiy22e5AQYzYJX1KpoZg3Fw1A0sx3lFb2F7ZEYLtZ8RbuzBdcRBqcrhMHRFbypNn6mQIt0ccKo0RK1rQ-FOM2jpW6fh_Zeq0z70Ea-Kd0jSCT-SAlM15N-0ZqQtMlkQScCltWJobP1tWQ7l_r7can_qbjkrq3dKaRmfcCVWd5LWKWY-jzYtt33lgK8Qr-88n7BH1Qk6x600hiUVD51vI-ZMfwD4pHTpzSt47Fnv330nIieflzGTO_hL4er_JQqDMEVwzjehtwaY266irgxVYkBNPWYn2bd11cDzFCo78Od6ZLMbZTuQbShGeY2OoHAJomy1jeHXCPkMYTYHv7iBGbVkC0msM5BBGFj_zldTtlb1o5IUd8mvlonLJ0b8EqCAALSxjXw06YG2vJZ24QdJnq2CeOcz0JI4phdFGyGkY63qifYwkpmSMZyvkoxJMCN7Hw5ROl5iSI6hHRaLAlgClrLozSbhIy1VqvtWGAavbJWPensxwvVuUb9CT_tCoeRRqZVvoyYDStOpi5PemULdm53WJp3Le6uN3fjnQaB6ZYIBJQeiu8m5kLOko3weDX2iZuM5C_UU_JKazaHcFqtloGrLYMKjMKJ0ihTn9SSDmJNs3WkRNN06tvD7Rnl2t1DHe-VBL0G1V_BKES_7zSuZ05bpWfDzrPJrbuHRvcFo-rmlZvh_TFKvLP3A5vBkm_7ncuoG87-Ro1c-HGD3qUPOMMDo1pG-9h-H0IdzL3Pbv9Oq324awSzOZqT5Sh6G29wuR_5A6a9je7lzO0Lrq3FuPtXcLitjU2Jd7PZSudma-spcT84U80CpX9DUl7cqPyAxnfktIPCfCcn3Yday6kijQzoSwjs8GHGOeXd7u7NhP8kTC3fSH8jptCQ7p2ltjEanDZ2OJi2YvDzAW0jba--BuidModzTtQdx9kb9z7kHIZdRTJazmWSqlVkis47y-7spkfqUIv3R-tDLUAbRKWabG-OokCeV1V7-_ukAe44StBJxG_d9kZvOtzeZr54lSGXeSupjR2TgR1QQ8_LisZ-mv2cG-I5UW3uh2pfUK3Pimm7sbd-_cZShbhbU6R8GyWZ6sJOyt9ndibd9t6EXcUxi_x1h_AoP_ImZQN7c0Gn3Qk9fAXYPxrLRTryzy2tgsEgYnfjyR17OTT-KEZYB4QpZ6R7657f2s3uhjNZk-IDm8sFKwcpO7z7Kljph1z4-PB4NNixYPyD3HlnydvQ3632OrBP0MXy60vErPFCL6YPiABykHhZBHIOmlsba9umpf717Ra3jsf8-xb3C91v7VT4xPcsYmttBG_rYjOwPEzB8PohjWYIOnvWXtK7K4uqbfnpJDjuRmKwHjJHmqnUZ-p_wNbetujShlseMRw04cVtvJLg7VDscxaGOR_prT2XUjinMpTKskKxjT2lvU637No7KQ0Zs7NwJNtK-PeeB2p9ZEKfLqN-ZxX6SLNBwUYRN5yKlW3_kEf4RFbdaf2Y9v7OzSPL2HG8gaedHgDwnoBGhuXbohkG-WK45m93hfFnC3uc-kaqv8ngPxUer835jFeW6OMYvSdHz8CLTvPHFDDdZX6305kDvGMoQklk23TjM6jmRynI-jL_P7m275Os9dYePe1xGnbIhcktcqjwwPkqMF7Y4-aNsTvZeH77HuCdh1dPxrHjz68edFp4na6P6C8ca_u8LOgcpCKKpc8ZdenQ9L6MGJ3WXxwv9uZxNCsMhM3yl6a955yO9gMPy38aFrQO9oo5-VeCU32Y4Mf1yWf3AVma-P_iiZ_K9dL-zoF6-GNs35ebn1ppGwXu0buMSVn3GTMZLQ13FAEakceAzE-Adfcg92tlPopMLvb0HHGe11up5E0fq_v5iXdah1OfafpoFknFxjH12JHB10bPe6o0y4uRjnJHn5HH3SMWt2PimU_NBHftces4ARu5Fty8Ha8NRKLDk2KbFhToZ1u3k__LagkUAh8_jz0aTa4iw7EKevdD-i0oVzo3pbufB_ntuaj9LhXNy0gs00p9TbFCAIt77WXVcH-JVQAx1bZqHWBV4eacYSrcGLTrpPpEmi24jeMoKABAMyFTRMZov7bm3gNHSHlEvLROHg_6U2NLFUBHpmC9S1tOrJhgC4oPx3s4qlBZXyNZ1XH5rQIGLp-x0h2mT-8sADoWIDjtWr1mUQqNiW3xGEYewxk3YTKteVYiQizyf9X8hQLQgTh12mGsPqWe6zhdp97otAO3R7udHu0FnQbzXTp1WoGHaTfQbcvVLXaJZRG15excsAlaBLTq2pMGnGxxvKU8yF5sAIJ7ex_B3wmHb0Y1B3bY6gZbKY37HiQDhHTWUE2oF6YtVUDymUFLdUr66ayDa-xFSEnYAWC5lBEjLzIRflpXASxWzLMnpLBqWxPwuElavzGyqAFPFtxnhMNKrRIvFSdW5IfyBUeDkZMkTt8DEC24khHqt-UHCMaWfqRl4C9UWalV83IQLQACCEem5RdS-agwAZknwnCsEw-x_ATfAUFRpEtii_jmttic5a8IMPSZaQiO679dV9xrHO5z_Uw0rkUE9YvMecTnybyW0UOFRqRFUA2lzl7skAix9SUGQCWoI7DGr12wS6fdrrc6rUa3d-FfNvxeo0cvDDeCXW5_vQVwzk88wG77GyZsUb2dJnuRRPHNFxeJEpeHaS36YiyqQRfS6jitzkV4CRGW02xSz_coGEfda_hBr9sJ2p3A8TvTTvdC0CkT-tK-t2BwwS_duuvWuxAKNFttt1drM9pstHtN-J42WbMDfo7NKRc1nLgm1exCXVocpskMTxxjHZx-a0R3MYsYy-HTxIRSXYIrVNZJLmYXFuVLi-9_ATJfxrk">