From 99a685a30f1adcd8014fa57993fa64bd0e5dd450 Mon Sep 17 00:00:00 2001 From: wsh Date: Wed, 11 Jun 2025 16:50:56 +0900 Subject: [PATCH] 1 --- .../Scripts/AssetLoaderOptionsEditor.cs | 311 +- .../Scripts/AssetLoaderOptionsEditor.cs.meta | 9 +- .../TriLibCore/Scripts/BuildProcessor.cs | 43 +- .../TriLibCore/Scripts/BuildProcessor.cs.meta | 9 +- .../ByNameHumanoidAvatarMapperEditor.cs | 41 + .../ByNameHumanoidAvatarMapperEditor.cs.meta | 18 + .../Editor/TriLibCore/Scripts/CheckMappers.cs | 91 +- .../TriLibCore/Scripts/CheckMappers.cs.meta | 7 + .../TriLibCore/Scripts/ImporterOption.cs.meta | 9 +- .../Scripts/LipSyncMappingEditor.cs.meta | 7 + .../Scripts/MapperContextActions.cs.meta | 7 + .../Scripts/PreBuiltResources.cs.meta | 7 + .../Scripts/ShaderVariantCollectionUtils.cs | 52 + .../ShaderVariantCollectionUtils.cs.meta | 18 + .../SimpleAnimationPlayerEditor.cs.meta | 9 +- .../Scripts/TriLib3MFScriptedImporter.cs | 4 + .../Scripts/TriLib3MFScriptedImporter.cs.meta | 7 + .../Scripts/TriLibDefineSymbolsHelper.cs | 30 +- .../Scripts/TriLibDefineSymbolsHelper.cs.meta | 7 + .../Scripts/TriLibDeprecationWarnings.cs.meta | 7 + .../Scripts/TriLibGLTFScriptedImporter.cs | 4 + .../TriLibGLTFScriptedImporter.cs.meta | 7 + .../Scripts/TriLibPLYScriptedImporter.cs | 4 + .../Scripts/TriLibPLYScriptedImporter.cs.meta | 7 + .../Scripts/TriLibSTLScriptedImporter.cs | 4 + .../Scripts/TriLibSTLScriptedImporter.cs.meta | 7 + .../Scripts/TriLibScriptedImporter.cs | 3 + .../Scripts/TriLibScriptedImporter.cs.meta | 7 + .../Scripts/TriLibSettingsProvider.cs | 13 +- .../Scripts/TriLibSettingsProvider.cs.meta | 9 +- .../Scripts/TriLibSplashScreen.cs.meta | 7 + .../Scripts/TriLibVersionInfo.cs.meta | 7 + .../TriLibCore/Scripts/TriLibVersionNotes.cs | 89 +- .../Scripts/TriLibVersionNotes.cs.meta | 7 + .../TriLib/Debug/ICSharpCode.SharpZipLib.dll | Bin 0 -> 200704 bytes .../Debug/ICSharpCode.SharpZipLib.dll.meta | 40 + .../Plugins/TriLib/Debug/IxMilia.ThreeMf.dll | Bin 0 -> 68096 bytes .../TriLib/Debug/IxMilia.ThreeMf.dll.meta | 40 + Assets/Plugins/TriLib/Debug/LibTessDotNet.dll | Bin 0 -> 38400 bytes .../TriLib/Debug/LibTessDotNet.dll.meta | 40 + Assets/Plugins/TriLib/Debug/StbImageSharp.dll | Bin 0 -> 76800 bytes .../TriLib/Debug/StbImageSharp.dll.meta | 40 + .../Plugins/TriLib/Debug/TriLibCore.Dae.dll | Bin 388608 -> 768000 bytes .../TriLib/Debug/TriLibCore.Dae.dll.meta | 63 +- .../Plugins/TriLib/Debug/TriLibCore.Fbx.dll | Bin 183296 -> 166400 bytes .../TriLib/Debug/TriLibCore.Fbx.dll.meta | 63 +- .../TriLib/Debug/TriLibCore.Gltf.Draco.dll | Bin 8704 -> 10752 bytes .../Debug/TriLibCore.Gltf.Draco.dll.meta | 63 +- .../Plugins/TriLib/Debug/TriLibCore.Gltf.dll | Bin 85504 -> 90624 bytes .../TriLib/Debug/TriLibCore.Gltf.dll.meta | 63 +- .../TriLib/Debug/TriLibCore.HDRLoader.dll | Bin 10240 -> 9728 bytes .../Debug/TriLibCore.HDRLoader.dll.meta | 63 +- .../Plugins/TriLib/Debug/TriLibCore.Obj.dll | Bin 34304 -> 31744 bytes .../TriLib/Debug/TriLibCore.Obj.dll.meta | 63 +- .../Plugins/TriLib/Debug/TriLibCore.Ply.dll | Bin 34816 -> 32768 bytes .../TriLib/Debug/TriLibCore.Ply.dll.meta | 78 +- .../Plugins/TriLib/Debug/TriLibCore.Stl.dll | Bin 19456 -> 18432 bytes .../TriLib/Debug/TriLibCore.Stl.dll.meta | 63 +- .../TriLib/Debug/TriLibCore.ThreeMf.dll | Bin 28160 -> 26624 bytes .../TriLib/Debug/TriLibCore.ThreeMf.dll.meta | 63 +- Assets/Plugins/TriLib/Debug/TriLibCore.dll | Bin 184832 -> 160256 bytes .../Plugins/TriLib/Debug/TriLibCore.dll.meta | 80 +- .../arm64-v8a/libdracodec_unity.so.meta | 7 + .../armeabi-v7a/libdracodec_unity.so.meta | 7 + .../OSX/dracodec_unity.bundle.meta | 93 + .../OSX/dracodec_unity.bundle/Contents.meta | 8 + .../dracodec_unity.bundle/Contents/Info.plist | 46 + .../dracodec_unity.bundle/Contents/MacOS.meta | 8 + .../Contents/MacOS/dracodec_unity | Bin 0 -> 1398528 bytes .../Contents/_CodeSignature.meta | 8 + .../Contents/_CodeSignature/CodeResources | 115 + .../Windows}/dracodec_unity.dll | Bin .../Windows/dracodec_unity.dll.meta | 99 + .../TriLibGltfDraco/iOS/libdraco.a.meta | 7 + .../iOS/libdracodec_unity.a.meta | 7 + .../Android/StandaloneFileBrowser.java.meta | 7 + ...daloneFileBrowserAndroidListener.java.meta | 7 + .../StandaloneFileBrowserFragment.java.meta | 7 + .../x86_64/libStandaloneFileBrowser.so.meta | 7 + .../StandaloneFileBrowser.bundle.meta | 6 +- .../StandaloneFileBrowser.jslib | 33 +- .../StandaloneFileBrowser.jslib.meta | 7 + .../x64/StandaloneFileBrowser.dll.meta | 7 + .../x86/StandaloneFileBrowser.dll.meta | 7 + .../iOS/StandaloneFileBrowser.mm.meta | 7 + Assets/Plugins/dracodec_unity.dll.meta | 46 - ...ersal Render Pipeline Asset_Renderer.asset | 22 +- .../HDRP/HDRPVariantCollection.shadervariants | 10 + .../HDRPVariantCollection.shadervariants.meta | 15 + .../Materials/TriLib/HDRP/TriLibHDRP.mat | 36 +- .../Materials/TriLib/HDRP/TriLibHDRP.mat.meta | 7 + .../Materials/TriLib/HDRP/TriLibHDRPAlpha.mat | 39 +- .../TriLib/HDRP/TriLibHDRPAlpha.mat.meta | 7 + .../TriLib/HDRP/TriLibHDRPAlphaCutout.mat | 38 +- .../HDRP/TriLibHDRPAlphaCutout.mat.meta | 7 + .../TriLib/HDRP/TriLibHDRPLoading.mat | 36 +- .../TriLib/HDRP/TriLibHDRPLoading.mat.meta | 7 + .../TriLib/Standard/TriLibStandard.mat | 72 +- .../TriLib/Standard/TriLibStandard.mat.meta | 9 +- .../TriLib/Standard/TriLibStandardAlpha.mat | 78 +- .../Standard/TriLibStandardAlpha.mat.meta | 13 +- .../Standard/TriLibStandardAlphaCompose.mat | 79 +- .../TriLibStandardAlphaCompose.mat.meta | 9 +- .../Standard/TriLibStandardAlphaCutout.mat | 78 +- .../TriLibStandardAlphaCutout.mat.meta | 9 +- ...ibStandardAlphaCutoutNoMetallicTexture.mat | 77 +- ...ndardAlphaCutoutNoMetallicTexture.mat.meta | 9 +- .../TriLibStandardAlphaNoMetallicTexture.mat | 77 +- ...LibStandardAlphaNoMetallicTexture.mat.meta | 9 +- .../TriLibStandardNoMetallicTexture.mat | 71 +- .../TriLibStandardNoMetallicTexture.mat.meta | 9 +- .../UniversalRP/TriLibUniversalRP.mat.meta | 7 + .../TriLibUniversalRPAlpha.mat.meta | 7 + .../TriLibUniversalRPAlphaCutout.mat.meta | 7 + .../TriLibUniversalRPLoading.mat.meta | 7 + Assets/Scenes/0.30.0.unity | 541 +- .../TriLibAutodeskInteractiveMaterials.meta | 8 + .../Resources.meta | 8 + .../Resources/Mappers.meta | 8 + ...eskInteractiveStandardMaterialMapper.asset | 17 + ...teractiveStandardMaterialMapper.asset.meta | 15 + .../Resources/MaterialHelpers.meta | 8 + .../AutodeskInteractiveMaterialsHelper.asset | 14 + ...odeskInteractiveMaterialsHelper.asset.meta | 15 + .../Resources/Materials.meta | 8 + .../Materials/AutodeskInteractive.meta | 8 + .../Materials/AutodeskInteractive/HDRP.meta | 8 + .../HDRP/AutodeskInteractive.mat | 313 + .../HDRP/AutodeskInteractive.mat.meta | 15 + .../AutodeskInteractive/Standard.meta | 8 + .../Standard/AutodeskInteractive.mat | 89 + .../Standard/AutodeskInteractive.mat.meta | 15 + .../AutodeskInteractive.shadervariants | 61 + .../AutodeskInteractive.shadervariants.meta | 15 + .../AutodeskInteractive/UniversalRP.meta | 8 + .../UniversalRP/AutodeskInteractive.mat | 145 + .../UniversalRP/AutodeskInteractive.mat.meta | 15 + .../Scenes.meta | 8 + .../Scenes/AutodeskInteractiveMaterials.unity | 1001 + .../AutodeskInteractiveMaterials.unity.meta | 14 + .../Scenes/Scripts.meta | 8 + .../AutodeskInteractiveMaterialsSample.cs | 154 + ...AutodeskInteractiveMaterialsSample.cs.meta | 18 + .../Scripts.meta | 8 + .../Scripts/Mappers.meta | 8 + ...todeskInteractiveStandardMaterialMapper.cs | 82 + ...kInteractiveStandardMaterialMapper.cs.meta | 18 + .../Scripts/Utils.meta | 8 + .../AutodeskInteractiveMaterialsHelper.cs | 77 + ...AutodeskInteractiveMaterialsHelper.cs.meta | 18 + .../TriLib/TriLibBlendShapePlayer.meta | 8 + .../TriLibBlendShapePlayer/Resources.meta | 8 + .../Resources/Mappers.meta | 8 + .../Mappers/BlendShapePlayerMapper.asset | 14 + .../Mappers/BlendShapePlayerMapper.asset.meta | 15 + .../TriLibBlendShapePlayer/Scripts.meta | 8 + .../Scripts/BlendShapePlayer.cs | 18562 ++++++++++++++++ .../Scripts/BlendShapePlayer.cs.meta | 18 + .../Scripts/BlendShapePlayerJob.cs | 59 + .../Scripts/BlendShapePlayerJob.cs.meta | 18 + .../Scripts/BlendShapePlayerMapper.cs | 46 + .../Scripts/BlendShapePlayerMapper.cs.meta | 18 + .../TriLib/TriLibCore/KnownIssues.txt | 23 +- .../TriLib/TriLibCore/KnownIssues.txt.meta | 7 + .../Licenses/AndroidNativeFilePicker.txt.meta | 7 + .../Licenses/IxMilia.ThreeMf.txt.meta | 7 + .../Licenses/LibTessDotNet.txt.meta | 7 + .../TriLibCore/Licenses/OpenSans.txt.meta | 7 + .../TriLib/TriLibCore/Licenses/PCX.txt.meta | 7 + .../TriLibCore/Licenses/SharpZipLib.txt.meta | 7 + .../Licenses/StandaloneFileBrowser.txt.meta | 7 + .../TriLib/TriLibCore/Licenses/draco.txt.meta | 7 + ...atorOverrideAnimationClipMapper.asset.meta | 7 + ...mationPlayerAnimationClipMapper.asset.meta | 7 + ...moAndBipedByNameHumanoidAvatarMapper.asset | 15 + ...BipedByNameHumanoidAvatarMapper.asset.meta | 7 + ...emeAndVisemeByNameLipSyncMapper.asset.meta | 7 + .../Mappers/Material/HDRPMaterialMapper.asset | 3 +- .../Material/HDRPMaterialMapper.asset.meta | 11 +- .../Material/StandardMaterialMapper.asset | 3 +- .../StandardMaterialMapper.asset.meta | 7 + .../Material/UniversalRPMaterialMapper.asset | 2 +- .../UniversalRPMaterialMapper.asset.meta | 11 +- .../RootBone/ByBonesRootBoneMapper.asset.meta | 7 + .../RootBone/ByNameRootBoneMapper.asset.meta | 7 + .../Mappers/TriLibMappersPlaceholder.meta | 7 + ...dardShaderVariantCollection.shadervariants | 37 + ...haderVariantCollection.shadervariants.meta | 15 + .../Standard/TriLibStandardLoading.mat | 13 +- .../Standard/TriLibStandardLoading.mat.meta | 7 + .../TriLibCore/Resources/Shaders/Extras.meta | 8 + .../Shaders/Extras/PointRenderer.shader | 98 + .../Shaders/Extras/PointRenderer.shader.meta | 16 + .../Shaders/StandardAlpha.shader.meta | 7 + .../Utility/ApplyTransparency.shader.meta | 7 + .../Utility/BuildMetallicTexture.shader | 3 +- .../Utility/BuildMetallicTexture.shader.meta | 7 + .../Utility/ExtractChannelData.shader.meta | 7 + .../Shaders/Utility/FixNormalMap.shader.meta | 7 + .../Utility/InvertChannelData.shader.meta | 7 + .../Utility/InvertChannels.shader.meta | 7 + .../Utility/SpecularDiffuseToAlbedo.shader | 73 +- .../SpecularDiffuseToAlbedo.shader.meta | 7 + .../Utility/SwapChannelData.shader.meta | 7 + .../Resources/Textures/TriLibBlack.png.meta | 7 + .../Resources/Textures/TriLibBump.png.meta | 7 + .../Resources/Textures/TriLibGreen.png | Bin 0 -> 84 bytes .../Resources/Textures/TriLibGreen.png.meta | 166 + .../Resources/Textures/TriLibGrey.png.meta | 7 + .../Textures/TriLibTransparent.png.meta | 7 + .../Textures/TriLibTransparentWhite.png.meta | 7 + .../Resources/Textures/TriLibWhite.png.meta | 7 + .../TriLibMainFolderPlaceholder.meta | 7 + .../TriLibCore/Resources/TriLibSettings.asset | 6 +- .../Scripts/AssetLoaders/AssetDownloader.cs | 186 +- .../AssetLoaders/AssetDownloader.cs.meta | 9 +- .../AssetLoaders/AssetDownloaderBehaviour.cs | 166 +- .../AssetDownloaderBehaviour.cs.meta | 9 +- .../Scripts/AssetLoaders/AssetLoader.cs | 3046 ++- .../Scripts/AssetLoaders/AssetLoader.cs.meta | 7 + .../Scripts/AssetLoaders/AssetLoaderZip.cs | 531 +- .../AssetLoaders/AssetLoaderZip.cs.meta | 9 +- .../Scripts/AssetLoaders/CoroutineHelper.cs | 43 +- .../AssetLoaders/CoroutineHelper.cs.meta | 7 + .../AssetLoaders/MultipleAssetLoaderZip.cs | 255 +- .../MultipleAssetLoaderZip.cs.meta | 7 + .../UriLoadCustomContextData.cs | 13 +- .../UriLoadCustomContextData.cs.meta | 9 +- .../ZipLoadCustomContextData.cs | 26 +- .../ZipLoadCustomContextData.cs.meta | 9 +- .../AnimatorOverrideAnimationClipMapper.cs | 20 +- ...nimatorOverrideAnimationClipMapper.cs.meta | 9 +- .../Scripts/Mappers/ByBonesRootBoneMapper.cs | 10 +- .../Mappers/ByBonesRootBoneMapper.cs.meta | 9 +- ...NameAnimatorOverrideAnimationClipMapper.cs | 27 +- ...nimatorOverrideAnimationClipMapper.cs.meta | 9 +- .../Mappers/ByNameHumanoidAvatarMapper.cs | 105 +- .../ByNameHumanoidAvatarMapper.cs.meta | 9 +- .../Scripts/Mappers/ByNameLipSyncMapper.cs | 38 +- .../Mappers/ByNameLipSyncMapper.cs.meta | 9 +- .../Scripts/Mappers/ByNameRootBoneMapper.cs | 38 +- .../Mappers/ByNameRootBoneMapper.cs.meta | 9 +- .../Scripts/Mappers/LipSyncMapping.cs.meta | 9 +- .../Mappers/PerFilenameTextureMapper.cs | 33 +- .../Mappers/PerFilenameTextureMapper.cs.meta | 7 + ...impleAnimationPlayerAnimationClipMapper.cs | 14 +- ...AnimationPlayerAnimationClipMapper.cs.meta | 9 +- .../Scripts/Mappers/StandardMaterialMapper.cs | 132 +- .../Mappers/StandardMaterialMapper.cs.meta | 7 + .../Mappers/ZipFileExternalDataMapper.cs | 21 +- .../Mappers/ZipFileExternalDataMapper.cs.meta | 9 +- .../Scripts/Mappers/ZipFileTextureMapper.cs | 32 +- .../Mappers/ZipFileTextureMapper.cs.meta | 9 +- .../TriLibCore/Scripts/Misc/AssetUnloader.cs | 71 +- .../Scripts/Misc/AssetUnloader.cs.meta | 7 + .../Scripts/Misc/RuntimeInitialization.cs | 2 +- .../Misc/RuntimeInitialization.cs.meta | 7 + .../Scripts/Misc/TriLibReaders.cs.meta | 9 +- .../TriLibCore/Scripts/Misc/TriLibSettings.cs | 37 +- .../Scripts/Misc/TriLibSettings.cs.meta | 7 + .../Playables/SimpleAnimationPlayer.cs | 4 +- .../Playables/SimpleAnimationPlayer.cs.meta | 7 + .../TriLibCore/Scripts/PointRenderer.meta | 8 + .../Scripts/PointRenderer/PointRenderer.cs | 192 + .../PointRenderer/PointRenderer.cs.meta | 18 + .../Scripts/Utils/GraphicsSettingsUtils.cs | 6 +- .../Utils/GraphicsSettingsUtils.cs.meta | 9 +- .../Scripts/Utils/MaterialsHelper.cs | 18 + .../Scripts/Utils/MaterialsHelper.cs.meta | 18 + .../TriLib/TriLibCore/Third-Party Notices.txt | 6 +- .../TriLibCore/Third-Party Notices.txt.meta | 7 + .../TriLib/TriLibCore/TriLibReleaseNotes.txt | 8 +- .../TriLibCore/TriLibReleaseNotes.txt.meta | 7 + .../TriLib/TriLibCore/TriLibVersion.txt | 140 + .../TriLib/TriLibCore/TriLibVersion.txt.meta | 7 + .../TriLib/TriLibCore/link.xml.meta | 7 + .../TriLib/TriLibGltfDraco.meta | 8 + .../TriLib/TriLibGltfDraco/Plugins.meta | 8 + .../Plugins/dracodec_unity.bundle.meta | 33 + .../dracodec_unity.bundle/Contents.meta | 8 + .../dracodec_unity.bundle/Contents/Info.plist | 46 + .../dracodec_unity.bundle/Contents/MacOS.meta | 8 + .../Contents/MacOS/dracodec_unity | Bin 0 -> 1147184 bytes .../TriLib/TriLibGltfMaterials.meta | 8 + .../TriLib/TriLibGltfMaterials/Resources.meta | 8 + .../Resources/Mappers.meta | 8 + .../Resources/Mappers/Material.meta | 8 + .../glTF2StandardMaterialMapper.asset | 17 + .../glTF2StandardMaterialMapper.asset.meta | 15 + .../Resources/MaterialHelpers.meta | 8 + .../MaterialHelpers/GltfMaterialsHelper.asset | 14 + .../GltfMaterialsHelper.asset.meta | 15 + .../Resources/Materials.meta | 8 + .../Resources/Materials/glTF2.meta | 8 + .../Resources/Materials/glTF2/HDRP.meta | 8 + .../glTF2/HDRP/HDRPGLTF2.shadergraph | 4293 ++++ .../glTF2/HDRP/HDRPGLTF2.shadergraph.meta | 17 + .../glTF2/HDRP/HDRPSpecularGLTF2.shadergraph | 4084 ++++ .../HDRP/HDRPSpecularGLTF2.shadergraph.meta | 17 + .../Resources/Materials/glTF2/Standard.meta | 8 + .../glTF2/Standard/StandardGLTF2.mat | 97 + .../glTF2/Standard/StandardGLTF2.mat.meta | 15 + .../glTF2/Standard/StandardGLTF2.shadergraph | 4096 ++++ .../Standard/StandardGLTF2.shadergraph.meta | 17 + .../glTF2/Standard/StandardSpecularGLTF2.mat | 100 + .../Standard/StandardSpecularGLTF2.mat.meta | 15 + .../StandardSpecularGLTF2.shadergraph | 3889 ++++ .../StandardSpecularGLTF2.shadergraph.meta | 17 + .../Materials/glTF2/UniversalRP.meta | 8 + .../UniversalRP/UniversalRPGLTF2.shadergraph | 4151 ++++ .../UniversalRPGLTF2.shadergraph.meta | 17 + .../UniversalRPSpecularGLTF2.shadergraph | 3942 ++++ .../UniversalRPSpecularGLTF2.shadergraph.meta | 17 + .../TriLib/TriLibGltfMaterials/Scenes.meta | 8 + .../Scenes/GltfMaterials.unity | 1000 + .../Scenes/GltfMaterials.unity.meta | 14 + .../TriLibGltfMaterials/Scenes/Scripts.meta | 8 + .../Scenes/Scripts/GltfMaterialsSample.cs | 157 + .../Scripts/GltfMaterialsSample.cs.meta | 18 + .../TriLib/TriLibGltfMaterials/Scripts.meta | 8 + .../TriLibGltfMaterials/Scripts/Mappers.meta | 8 + .../Mappers/glTF2StandardMaterialMapper.cs | 121 + .../glTF2StandardMaterialMapper.cs.meta | 18 + .../TriLibGltfMaterials/Scripts/Utils.meta | 8 + .../Scripts/Utils/GltfMaterialsHelper.cs | 67 + .../Scripts/Utils/GltfMaterialsHelper.cs.meta | 18 + .../TriLib/TriLibHDRP/HDRPMaterialMapper.cs | 30 +- .../TriLibHDRP/HDRPMaterialMapper.cs.meta | 7 + .../TriLib/TriLibHDRP/HDRPVirtualMaterial.cs | 1 - .../TriLibHDRP/HDRPVirtualMaterial.cs.meta | 7 + .../TriLib/TriLibHDRP/Resources.meta | 8 + .../TriLib/TriLibHDRP/Resources/Mappers.meta | 8 + .../Mappers/HDRPMaterialMapper.asset | 17 + .../Mappers/HDRPMaterialMapper.asset.meta | 15 + .../TriLib/TriLibHDRP/Resources/Shaders.meta | 8 + .../Resources/Shaders/BuildHDRPMask.shader | 58 + .../Shaders/BuildHDRPMask.shader.meta | 16 + .../ExternalAssets/TriLib/TriLibSamples.meta | 8 + .../TriLib/TriLibSamples/AssetViewer.meta | 8 + .../AssetViewer/AssetViewer.unity | 12500 +++++++++++ .../AssetViewer/AssetViewer.unity.meta | 15 + .../TriLibSamples/AssetViewer/Materials.meta | 8 + .../AssetViewer/Materials/Skybox.mat | 84 + .../AssetViewer/Materials/Skybox.mat.meta | 15 + .../TriLibSamples/AssetViewer/Scripts.meta | 8 + .../AssetViewer/Scripts/AssetViewer.cs | 1341 ++ .../AssetViewer/Scripts/AssetViewer.cs.meta | 18 + .../TriLibSamples/AssetViewer/Utils.meta | 8 + .../AssetViewer/Utils/RuntimeProcessUtils.cs | 44 + .../Utils/RuntimeProcessUtils.cs.meta | 18 + .../TriLib/TriLibSamples/AvatarLoader.meta | 8 + .../AvatarLoader/AnimatorControllers.meta | 8 + .../AnimatorControllers/Mannequin.controller | 266 + .../Mannequin.controller.meta | 15 + .../AvatarLoader/AvatarLoader.unity | 3385 +++ .../AvatarLoader/AvatarLoader.unity.meta | 14 + .../TriLibSamples/AvatarLoader/Materials.meta | 8 + .../AvatarLoader/Materials/Ground.mat | 77 + .../AvatarLoader/Materials/Ground.mat.meta | 15 + .../TriLibSamples/AvatarLoader/Models.meta | 8 + .../AvatarLoader/Models/FinalRig.fbx | Bin 0 -> 2834512 bytes .../AvatarLoader/Models/FinalRig.fbx.meta | 116 + .../AvatarLoader/Models/ReadMe.txt | 1 + .../AvatarLoader/Models/ReadMe.txt.meta | 14 + .../AvatarLoader/Models/idle_anim.fbx | Bin 0 -> 2796608 bytes .../AvatarLoader/Models/idle_anim.fbx.meta | 1502 ++ .../AvatarLoader/Models/walk_anim.fbx | Bin 0 -> 2517744 bytes .../AvatarLoader/Models/walk_anim.fbx.meta | 1502 ++ .../TriLibSamples/AvatarLoader/Scripts.meta | 8 + .../AvatarLoader/Scripts/AvatarLoader.cs | 509 + .../AvatarLoader/Scripts/AvatarLoader.cs.meta | 18 + .../TriLibSamples/AvatarLoader/Textures.meta | 8 + .../AvatarLoader/Textures/Ground.png | Bin 0 -> 881 bytes .../AvatarLoader/Textures/Ground.png.meta | 98 + .../TriLibSamples/AvatarLoader/Utils.meta | 8 + .../AvatarLoader/Utils/AvatarController.cs | 147 + .../Utils/AvatarController.cs.meta | 18 + .../TriLib/TriLibSamples/Common.meta | 8 + .../TriLibSamples/Common/AnimationClips.meta | 8 + .../Common/AnimationClips/Fountain.controller | 72 + .../AnimationClips/Fountain.controller.meta | 15 + .../Common/AnimationClips/Loading.anim | 117 + .../Common/AnimationClips/Loading.anim.meta | 15 + .../TriLib/TriLibSamples/Common/Fonts.meta | 8 + .../Common/Fonts/OpenSans-Bold.ttf | Bin 0 -> 104120 bytes .../Common/Fonts/OpenSans-Bold.ttf.meta | 38 + .../Common/Fonts/OpenSans-BoldItalic.ttf | Bin 0 -> 92628 bytes .../Common/Fonts/OpenSans-BoldItalic.ttf.meta | 29 + .../Common/Fonts/OpenSans-ExtraBold.ttf | Bin 0 -> 102076 bytes .../Common/Fonts/OpenSans-ExtraBold.ttf.meta | 31 + .../Common/Fonts/OpenSans-ExtraBoldItalic.ttf | Bin 0 -> 92772 bytes .../Fonts/OpenSans-ExtraBoldItalic.ttf.meta | 37 + .../Common/Fonts/OpenSans-Italic.ttf | Bin 0 -> 92240 bytes .../Common/Fonts/OpenSans-Italic.ttf.meta | 34 + .../Common/Fonts/OpenSans-Light.ttf | Bin 0 -> 101696 bytes .../Common/Fonts/OpenSans-Light.ttf.meta | 32 + .../Common/Fonts/OpenSans-LightItalic.ttf | Bin 0 -> 92488 bytes .../Fonts/OpenSans-LightItalic.ttf.meta | 36 + .../Common/Fonts/OpenSans-Regular.ttf | Bin 0 -> 96932 bytes .../Common/Fonts/OpenSans-Regular.ttf.meta | 33 + .../Common/Fonts/OpenSans-SemiBold.ttf | Bin 0 -> 100820 bytes .../Common/Fonts/OpenSans-SemiBold.ttf.meta | 30 + .../Common/Fonts/OpenSans-SemiBoldItalic.ttf | Bin 0 -> 92180 bytes .../Fonts/OpenSans-SemiBoldItalic.ttf.meta | 35 + .../TriLib/TriLibSamples/Common/Plugins.meta | 8 + .../Common/Plugins/PasteManagerPlugin.jslib | 10 + .../Plugins/PasteManagerPlugin.jslib.meta | 39 + .../TriLibSamples/Common/Resources.meta | 8 + .../Common/Resources/ShowAlbedo.shader | 49 + .../Common/Resources/ShowAlbedo.shader.meta | 16 + .../Common/Resources/ShowEmission.shader | 47 + .../Common/Resources/ShowEmission.shader.meta | 16 + .../Common/Resources/ShowMetallic.shader | 51 + .../Common/Resources/ShowMetallic.shader.meta | 16 + .../Common/Resources/ShowNormals.shader | 66 + .../Common/Resources/ShowNormals.shader.meta | 16 + .../Common/Resources/ShowOcclusion.shader | 47 + .../Resources/ShowOcclusion.shader.meta | 16 + .../Common/Resources/ShowSkeleton.shader | 51 + .../Common/Resources/ShowSkeleton.shader.meta | 16 + .../Common/Resources/ShowSmooth.shader | 51 + .../Common/Resources/ShowSmooth.shader.meta | 16 + .../Common/Resources/ShowVertexColors.shader | 43 + .../Resources/ShowVertexColors.shader.meta | 17 + .../TriLib/TriLibSamples/Common/Scripts.meta | 8 + .../Common/Scripts/AbstractInputSystem.cs | 221 + .../Scripts/AbstractInputSystem.cs.meta | 18 + .../Common/Scripts/FixMaterials.cs | 51 + .../Common/Scripts/FixMaterials.cs.meta | 18 + .../Common/Scripts/PasteManager.cs | 73 + .../Common/Scripts/PasteManager.cs.meta | 18 + .../Common/Scripts/ShowSkeleton.cs | 158 + .../Common/Scripts/ShowSkeleton.cs.meta | 18 + .../TriLib/TriLibSamples/Common/Textures.meta | 8 + .../TriLibSamples/Common/Textures/Arrow.png | Bin 0 -> 483 bytes .../Common/Textures/Arrow.png.meta | 134 + .../Common/Textures/ArrowLeft.png | Bin 0 -> 475 bytes .../Common/Textures/ArrowLeft.png.meta | 134 + .../Common/Textures/dropdown.png | Bin 0 -> 229 bytes .../Common/Textures/dropdown.png.meta | 134 + .../Common/Textures/fountain.png | Bin 0 -> 5731 bytes .../Common/Textures/fountain.png.meta | 503 + .../Common/Textures/helpbutton.png | Bin 0 -> 308 bytes .../Common/Textures/helpbutton.png.meta | 134 + .../TriLibSamples/Common/Textures/knob.png | Bin 0 -> 220 bytes .../Common/Textures/knob.png.meta | 147 + .../Common/Textures/playbutton.png | Bin 0 -> 261 bytes .../Common/Textures/playbutton.png.meta | 134 + .../Common/Textures/roundbutton.png | Bin 0 -> 293 bytes .../Common/Textures/roundbutton.png.meta | 134 + .../Common/Textures/roundbuttonborder.png | Bin 0 -> 341 bytes .../Textures/roundbuttonborder.png.meta | 216 + .../Common/Textures/stopbutton.png | Bin 0 -> 1970 bytes .../Common/Textures/stopbutton.png.meta | 134 + .../TriLibSamples/ListModelResources.meta | 8 + .../ListModelResources.unity | 1185 + .../ListModelResources.unity.meta | 14 + .../ListModelResources/Scripts.meta | 8 + .../Scripts/ListModelResourcesSample.cs | 210 + .../Scripts/ListModelResourcesSample.cs.meta | 18 + .../TriLibSamples/LoadExtraAnimations.meta | 8 + .../LoadExtraAnimations.unity | 875 + .../LoadExtraAnimations.unity.meta | 14 + .../LoadExtraAnimations/Models.meta | 8 + .../LoadExtraAnimations/Models/BuddyBase.fbx | Bin 0 -> 121152 bytes .../Models/BuddyBase.fbx.meta | 116 + .../LoadExtraAnimations/Models/BuddyIdle.fbx | Bin 0 -> 215248 bytes .../Models/BuddyIdle.fbx.meta | 116 + .../LoadExtraAnimations/Models/BuddyJump.fbx | Bin 0 -> 126800 bytes .../Models/BuddyJump.fbx.meta | 116 + .../LoadExtraAnimations/Models/BuddyWalk.fbx | 2567 +++ .../Models/BuddyWalk.fbx.meta | 116 + .../LoadExtraAnimations/Scripts.meta | 8 + .../Scripts/LoadExtraAnimationsSample.cs | 264 + .../Scripts/LoadExtraAnimationsSample.cs.meta | 18 + .../LoadExtraAnimations/Source Models.meta | 8 + .../Source Models/Buddy.mlt | Bin 0 -> 131412 bytes .../Source Models/Buddy.mlt.meta | 15 + .../Source Models/BuddyIdle.mlt | Bin 0 -> 200544 bytes .../Source Models/BuddyIdle.mlt.meta | 15 + .../Source Models/BuddyJump.mlt | Bin 0 -> 231652 bytes .../Source Models/BuddyJump.mlt.meta | 15 + .../Source Models/BuddyWalk.mlt | Bin 0 -> 200792 bytes .../Source Models/BuddyWalk.mlt.meta | 15 + .../TriLibSamples/LoadModelFromFile.meta | 8 + .../LoadModelFromFile/LoadModelFromFile.unity | 622 + .../LoadModelFromFile.unity.meta | 16 + .../LoadModelFromFile/Models.meta | 8 + .../Models/TriLibSampleModel.mtl | 13 + .../Models/TriLibSampleModel.mtl.meta | 16 + .../Models/TriLibSampleModel.obj | 2041 ++ .../Models/TriLibSampleModel.obj.meta | 102 + .../LoadModelFromFile/Models/sampleTex.png | Bin 0 -> 158 bytes .../Models/sampleTex.png.meta | 85 + .../LoadModelFromFile/Scripts.meta | 8 + .../Scripts/LoadModelFromFileSample.cs | 109 + .../Scripts/LoadModelFromFileSample.cs.meta | 18 + .../LoadModelFromFilePicker.meta | 8 + .../LoadModelFromFilePicker.unity | 917 + .../LoadModelFromFilePicker.unity.meta | 14 + .../LoadModelFromFilePicker/Scripts.meta | 8 + .../Scripts/LoadModelFromFilePickerSample.cs | 161 + .../LoadModelFromFilePickerSample.cs.meta | 18 + .../TriLibSamples/LoadModelFromStream.meta | 8 + .../LoadModelFromStream.unity | 626 + .../LoadModelFromStream.unity.meta | 14 + .../LoadModelFromStream/Mappers.meta | 8 + .../Mappers/ExternalDataMapperSample.cs | 32 + .../Mappers/ExternalDataMapperSample.cs.meta | 18 + .../Mappers/TextureMapperSample.cs | 30 + .../Mappers/TextureMapperSample.cs.meta | 18 + .../LoadModelFromStream/Models.meta | 8 + .../Models/TriLibSampleModel.mtl | 13 + .../Models/TriLibSampleModel.mtl.meta | 16 + .../Models/TriLibSampleModel.obj | 2041 ++ .../Models/TriLibSampleModel.obj.meta | 102 + .../LoadModelFromStream/Models/sampleTex.png | Bin 0 -> 158 bytes .../Models/sampleTex.png.meta | 85 + .../LoadModelFromStream/Scripts.meta | 8 + .../Scripts/LoadModelFromStreamSample.cs | 146 + .../Scripts/LoadModelFromStreamSample.cs.meta | 18 + .../TriLibSamples/LoadModelFromURL.meta | 8 + .../LoadModelFromURL/LoadModelFromURL.unity | 684 + .../LoadModelFromURL.unity.meta | 14 + .../LoadModelFromURL/Scripts.meta | 8 + .../Scripts/LoadModelFromURLSample.cs | 103 + .../Scripts/LoadModelFromURLSample.cs.meta | 18 + .../SimpleCustomAssetLoader.meta | 8 + .../SimpleCustomAssetLoader/Mappers.meta | 8 + .../Mappers/SimpleExternalDataMapper.cs | 63 + .../Mappers/SimpleExternalDataMapper.cs.meta | 18 + .../Mappers/SimpleTextureMapper.cs | 51 + .../Mappers/SimpleTextureMapper.cs.meta | 18 + .../SimpleCustomAssetLoader/Scripts.meta | 8 + .../Scripts/SimpleCustomLoaderSample.cs | 227 + .../Scripts/SimpleCustomLoaderSample.cs.meta | 18 + .../SimpleCustomAssetLoaderSample.unity | 549 + .../SimpleCustomAssetLoaderSample.unity.meta | 14 + .../SimpleCustomAssetLoader/Utils.meta | 8 + .../Utils/SimpleCustomAssetLoader.cs | 156 + .../Utils/SimpleCustomAssetLoader.cs.meta | 18 + .../TriLibSamples/UserPropertiesLoading.meta | 8 + .../UserPropertiesLoading/Scripts.meta | 8 + .../Scripts/UserPropertiesLoadingSample.cs | 382 + .../UserPropertiesLoadingSample.cs.meta | 18 + .../UserPropertiesLoadingSample.unity | 1125 + .../UserPropertiesLoadingSample.unity.meta | 14 + .../UserPropertiesLoading/Utils.meta | 8 + .../Utils/SampleUserPropertiesMapper.cs | 53 + .../Utils/SampleUserPropertiesMapper.cs.meta | 18 + .../StandaloneFileBrowser/Editor.meta | 8 + .../StandaloneFileBrowserPreprocessor.cs | 42 + .../StandaloneFileBrowserPreprocessor.cs.meta | 18 + .../ExtensionFilter.cs.meta | 7 + .../IStandaloneFileBrowser.cs.meta | 7 + .../ItemWithStream.cs.meta | 7 + .../StandaloneFileBrowser.cs | 236 +- .../StandaloneFileBrowser.cs.meta | 7 + .../StandaloneFileBrowserAndroid.cs.meta | 7 + .../StandaloneFileBrowserEditor.cs | 8 +- .../StandaloneFileBrowserEditor.cs.meta | 7 + .../StandaloneFileBrowserIOS.cs | 3 +- .../StandaloneFileBrowserIOS.cs.meta | 7 + .../StandaloneFileBrowserLinux.cs | 66 +- .../StandaloneFileBrowserLinux.cs.meta | 9 +- .../StandaloneFileBrowserMac.cs | 66 +- .../StandaloneFileBrowserMac.cs.meta | 7 + .../StandaloneFileBrowserWebGL.cs | 9 +- .../StandaloneFileBrowserWebGL.cs.meta | 7 + .../StandaloneFileBrowserWinRT.cs | 20 +- .../StandaloneFileBrowserWinRT.cs.meta | 7 + .../StandaloneFileBrowserWindows.cs | 55 +- .../StandaloneFileBrowserWindows.cs.meta | 7 + .../TriLib/AssetLoaderFilePicker.cs | 164 +- .../TriLib/AssetLoaderFilePicker.cs.meta | 7 + .../TriLib/IOAssetLoader.cs | 199 +- .../TriLib/IOAssetLoader.cs.meta | 7 + .../Mappers/FilePickerExternalDataMapper.cs | 19 +- .../FilePickerExternalDataMapper.cs.meta | 7 + .../TriLib/Mappers/FilePickerTextureMapper.cs | 17 +- .../Mappers/FilePickerTextureMapper.cs.meta | 7 + .../StandaloneFileBrowserSources.zip.meta | 7 + .../ExternalAssets/TriLib/TriLibTiff.meta | 8 + .../TriLib/TriLibTiff/Licenses.meta | 8 + .../Licenses/BitMiracle.LibTiff.Net.txt | 50 + .../Licenses/BitMiracle.LibTiff.Net.txt.meta | 14 + .../TriLib/TriLibTiff/Plugins.meta | 8 + .../Plugins/BitMiracle.LibTiff.NET.dll | Bin 0 -> 647680 bytes .../Plugins/BitMiracle.LibTiff.NET.dll.meta | 40 + .../TriLib/TriLibTiff/Sample.meta | 8 + .../Sample/LoadModelWithTiffTextures.unity | 939 + .../LoadModelWithTiffTextures.unity.meta | 14 + ...LoadModelWithTiffTexturesSettings.lighting | 64 + ...odelWithTiffTexturesSettings.lighting.meta | 15 + .../TriLib/TriLibTiff/Sample/Scripts.meta | 8 + .../Scripts/LoadModelWithTiffTextures.cs | 126 + .../Scripts/LoadModelWithTiffTextures.cs.meta | 18 + .../TriLib/TriLibTiff/TextureMapper.meta | 8 + .../TextureMapper/TiffTextureMapper.cs | 81 + .../TextureMapper/TiffTextureMapper.cs.meta | 18 + .../TriLib/TriLibUniversalRP/Resources.meta | 8 + .../TriLibUniversalRP/Resources/Mappers.meta | 8 + .../Mappers/UniversalRPMaterialMapper.asset | 16 + .../UniversalRPMaterialMapper.asset.meta | 15 + .../Resources/Materials.meta | 8 + .../Resources/Materials/UniversalRP.meta | 8 + ...niversalRPVariantCollection.shadervariants | 10 + ...salRPVariantCollection.shadervariants.meta | 15 + .../UniversalRPMaterialMapper.cs | 92 +- .../UniversalRPMaterialMapper.cs.meta | 7 + Assets/{ => Scripts}/Panel_Toolbox.cs | 0 Assets/{ => Scripts}/Panel_Toolbox.cs.meta | 0 .../Scripts/UVC/ScriptableRenderFeature.meta | 8 + .../ScriptableRenderFeature/EdgeDetection.cs | 97 + .../EdgeDetection.cs.meta | 2 + .../ScriptableRenderFeature/New Material.mat | 135 + .../New Material.mat.meta | 8 + Assets/{ => Scripts}/UVCToggleButton.cs | 0 Assets/{ => Scripts}/UVCToggleButton.cs.meta | 0 Assets/Shader.meta | 8 + Assets/Shader/Custom_EdgeDetectionOutline.mat | 32 + .../Custom_EdgeDetectionOutline.mat.meta | 8 + Assets/Shader/EdgeDetection.shader | 116 + Assets/Shader/EdgeDetection.shader.meta | 9 + Assets/Shader/EdgeOutline.shadergraph | 884 + Assets/Shader/EdgeOutline.shadergraph.meta | 10 + Assets/Shader/StandardOutline.mat | 137 + Assets/Shader/StandardOutline.mat.meta | 8 + Assets/Shader/StandardOutline.shadergraph | 1969 ++ .../Shader/StandardOutline.shadergraph.meta | 10 + Assets/Textures/TriLibHDRP/HDRPMask.png.meta | 7 + 631 files changed, 102634 insertions(+), 3158 deletions(-) create mode 100644 Assets/Editor/TriLibCore/Scripts/ByNameHumanoidAvatarMapperEditor.cs create mode 100644 Assets/Editor/TriLibCore/Scripts/ByNameHumanoidAvatarMapperEditor.cs.meta create mode 100644 Assets/Editor/TriLibCore/Scripts/ShaderVariantCollectionUtils.cs create mode 100644 Assets/Editor/TriLibCore/Scripts/ShaderVariantCollectionUtils.cs.meta create mode 100644 Assets/Plugins/TriLib/Debug/ICSharpCode.SharpZipLib.dll create mode 100644 Assets/Plugins/TriLib/Debug/ICSharpCode.SharpZipLib.dll.meta create mode 100644 Assets/Plugins/TriLib/Debug/IxMilia.ThreeMf.dll create mode 100644 Assets/Plugins/TriLib/Debug/IxMilia.ThreeMf.dll.meta create mode 100644 Assets/Plugins/TriLib/Debug/LibTessDotNet.dll create mode 100644 Assets/Plugins/TriLib/Debug/LibTessDotNet.dll.meta create mode 100644 Assets/Plugins/TriLib/Debug/StbImageSharp.dll create mode 100644 Assets/Plugins/TriLib/Debug/StbImageSharp.dll.meta create mode 100644 Assets/Plugins/TriLibGltfDraco/OSX/dracodec_unity.bundle.meta create mode 100644 Assets/Plugins/TriLibGltfDraco/OSX/dracodec_unity.bundle/Contents.meta create mode 100644 Assets/Plugins/TriLibGltfDraco/OSX/dracodec_unity.bundle/Contents/Info.plist create mode 100644 Assets/Plugins/TriLibGltfDraco/OSX/dracodec_unity.bundle/Contents/MacOS.meta create mode 100644 Assets/Plugins/TriLibGltfDraco/OSX/dracodec_unity.bundle/Contents/MacOS/dracodec_unity create mode 100644 Assets/Plugins/TriLibGltfDraco/OSX/dracodec_unity.bundle/Contents/_CodeSignature.meta create mode 100644 Assets/Plugins/TriLibGltfDraco/OSX/dracodec_unity.bundle/Contents/_CodeSignature/CodeResources rename Assets/Plugins/{ => TriLibGltfDraco/Windows}/dracodec_unity.dll (100%) create mode 100644 Assets/Plugins/TriLibGltfDraco/Windows/dracodec_unity.dll.meta delete mode 100644 Assets/Plugins/dracodec_unity.dll.meta create mode 100644 Assets/Resources/Materials/TriLib/HDRP/HDRPVariantCollection.shadervariants create mode 100644 Assets/Resources/Materials/TriLib/HDRP/HDRPVariantCollection.shadervariants.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Mappers.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Mappers/AutodeskInteractiveStandardMaterialMapper.asset create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Mappers/AutodeskInteractiveStandardMaterialMapper.asset.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/MaterialHelpers.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/MaterialHelpers/AutodeskInteractiveMaterialsHelper.asset create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/MaterialHelpers/AutodeskInteractiveMaterialsHelper.asset.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Materials.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Materials/AutodeskInteractive.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Materials/AutodeskInteractive/HDRP.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Materials/AutodeskInteractive/HDRP/AutodeskInteractive.mat create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Materials/AutodeskInteractive/HDRP/AutodeskInteractive.mat.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Materials/AutodeskInteractive/Standard.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Materials/AutodeskInteractive/Standard/AutodeskInteractive.mat create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Materials/AutodeskInteractive/Standard/AutodeskInteractive.mat.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Materials/AutodeskInteractive/Standard/AutodeskInteractive.shadervariants create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Materials/AutodeskInteractive/Standard/AutodeskInteractive.shadervariants.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Materials/AutodeskInteractive/UniversalRP.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Materials/AutodeskInteractive/UniversalRP/AutodeskInteractive.mat create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Resources/Materials/AutodeskInteractive/UniversalRP/AutodeskInteractive.mat.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Scenes.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Scenes/AutodeskInteractiveMaterials.unity create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Scenes/AutodeskInteractiveMaterials.unity.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Scenes/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Scenes/Scripts/AutodeskInteractiveMaterialsSample.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Scenes/Scripts/AutodeskInteractiveMaterialsSample.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Scripts/Mappers.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Scripts/Mappers/AutodeskInteractiveStandardMaterialMapper.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Scripts/Mappers/AutodeskInteractiveStandardMaterialMapper.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Scripts/Utils.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Scripts/Utils/AutodeskInteractiveMaterialsHelper.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibAutodeskInteractiveMaterials/Scripts/Utils/AutodeskInteractiveMaterialsHelper.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibBlendShapePlayer.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibBlendShapePlayer/Resources.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibBlendShapePlayer/Resources/Mappers.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibBlendShapePlayer/Resources/Mappers/BlendShapePlayerMapper.asset create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibBlendShapePlayer/Resources/Mappers/BlendShapePlayerMapper.asset.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibBlendShapePlayer/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibBlendShapePlayer/Scripts/BlendShapePlayer.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibBlendShapePlayer/Scripts/BlendShapePlayer.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibBlendShapePlayer/Scripts/BlendShapePlayerJob.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibBlendShapePlayer/Scripts/BlendShapePlayerJob.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibBlendShapePlayer/Scripts/BlendShapePlayerMapper.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibBlendShapePlayer/Scripts/BlendShapePlayerMapper.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibCore/Resources/Materials/Standard/StandardShaderVariantCollection.shadervariants create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibCore/Resources/Materials/Standard/StandardShaderVariantCollection.shadervariants.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibCore/Resources/Shaders/Extras.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibCore/Resources/Shaders/Extras/PointRenderer.shader create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibCore/Resources/Shaders/Extras/PointRenderer.shader.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibCore/Resources/Textures/TriLibGreen.png create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibCore/Resources/Textures/TriLibGreen.png.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibCore/Scripts/PointRenderer.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibCore/Scripts/PointRenderer/PointRenderer.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibCore/Scripts/PointRenderer/PointRenderer.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibCore/Scripts/Utils/MaterialsHelper.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibCore/Scripts/Utils/MaterialsHelper.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfDraco.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfDraco/Plugins.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfDraco/Plugins/dracodec_unity.bundle.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfDraco/Plugins/dracodec_unity.bundle/Contents.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfDraco/Plugins/dracodec_unity.bundle/Contents/Info.plist create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfDraco/Plugins/dracodec_unity.bundle/Contents/MacOS.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfDraco/Plugins/dracodec_unity.bundle/Contents/MacOS/dracodec_unity create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Mappers.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Mappers/Material.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Mappers/Material/glTF2StandardMaterialMapper.asset create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Mappers/Material/glTF2StandardMaterialMapper.asset.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/MaterialHelpers.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/MaterialHelpers/GltfMaterialsHelper.asset create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/MaterialHelpers/GltfMaterialsHelper.asset.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/HDRP.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/HDRP/HDRPGLTF2.shadergraph create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/HDRP/HDRPGLTF2.shadergraph.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/HDRP/HDRPSpecularGLTF2.shadergraph create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/HDRP/HDRPSpecularGLTF2.shadergraph.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/Standard.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/Standard/StandardGLTF2.mat create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/Standard/StandardGLTF2.mat.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/Standard/StandardGLTF2.shadergraph create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/Standard/StandardGLTF2.shadergraph.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/Standard/StandardSpecularGLTF2.mat create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/Standard/StandardSpecularGLTF2.mat.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/Standard/StandardSpecularGLTF2.shadergraph create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/Standard/StandardSpecularGLTF2.shadergraph.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/UniversalRP.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/UniversalRP/UniversalRPGLTF2.shadergraph create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/UniversalRP/UniversalRPGLTF2.shadergraph.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/UniversalRP/UniversalRPSpecularGLTF2.shadergraph create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Resources/Materials/glTF2/UniversalRP/UniversalRPSpecularGLTF2.shadergraph.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Scenes.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Scenes/GltfMaterials.unity create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Scenes/GltfMaterials.unity.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Scenes/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Scenes/Scripts/GltfMaterialsSample.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Scenes/Scripts/GltfMaterialsSample.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Scripts/Mappers.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Scripts/Mappers/glTF2StandardMaterialMapper.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Scripts/Mappers/glTF2StandardMaterialMapper.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Scripts/Utils.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Scripts/Utils/GltfMaterialsHelper.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibGltfMaterials/Scripts/Utils/GltfMaterialsHelper.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibHDRP/Resources.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibHDRP/Resources/Mappers.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibHDRP/Resources/Mappers/HDRPMaterialMapper.asset create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibHDRP/Resources/Mappers/HDRPMaterialMapper.asset.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibHDRP/Resources/Shaders.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibHDRP/Resources/Shaders/BuildHDRPMask.shader create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibHDRP/Resources/Shaders/BuildHDRPMask.shader.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AssetViewer.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AssetViewer/AssetViewer.unity create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AssetViewer/AssetViewer.unity.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AssetViewer/Materials.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AssetViewer/Materials/Skybox.mat create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AssetViewer/Materials/Skybox.mat.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AssetViewer/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AssetViewer/Scripts/AssetViewer.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AssetViewer/Scripts/AssetViewer.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AssetViewer/Utils.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AssetViewer/Utils/RuntimeProcessUtils.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AssetViewer/Utils/RuntimeProcessUtils.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/AnimatorControllers.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/AnimatorControllers/Mannequin.controller create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/AnimatorControllers/Mannequin.controller.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/AvatarLoader.unity create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/AvatarLoader.unity.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Materials.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Materials/Ground.mat create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Materials/Ground.mat.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Models.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Models/FinalRig.fbx create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Models/FinalRig.fbx.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Models/ReadMe.txt create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Models/ReadMe.txt.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Models/idle_anim.fbx create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Models/idle_anim.fbx.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Models/walk_anim.fbx create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Models/walk_anim.fbx.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Scripts/AvatarLoader.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Scripts/AvatarLoader.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Textures.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Textures/Ground.png create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Textures/Ground.png.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Utils.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Utils/AvatarController.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/AvatarLoader/Utils/AvatarController.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/AnimationClips.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/AnimationClips/Fountain.controller create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/AnimationClips/Fountain.controller.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/AnimationClips/Loading.anim create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/AnimationClips/Loading.anim.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-Bold.ttf create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-Bold.ttf.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-BoldItalic.ttf create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-BoldItalic.ttf.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-ExtraBold.ttf create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-ExtraBold.ttf.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-ExtraBoldItalic.ttf create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-ExtraBoldItalic.ttf.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-Italic.ttf create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-Italic.ttf.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-Light.ttf create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-Light.ttf.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-LightItalic.ttf create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-LightItalic.ttf.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-Regular.ttf create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-Regular.ttf.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-SemiBold.ttf create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-SemiBold.ttf.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-SemiBoldItalic.ttf create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Fonts/OpenSans-SemiBoldItalic.ttf.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Plugins.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Plugins/PasteManagerPlugin.jslib create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Plugins/PasteManagerPlugin.jslib.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowAlbedo.shader create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowAlbedo.shader.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowEmission.shader create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowEmission.shader.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowMetallic.shader create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowMetallic.shader.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowNormals.shader create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowNormals.shader.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowOcclusion.shader create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowOcclusion.shader.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowSkeleton.shader create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowSkeleton.shader.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowSmooth.shader create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowSmooth.shader.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowVertexColors.shader create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Resources/ShowVertexColors.shader.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Scripts/AbstractInputSystem.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Scripts/AbstractInputSystem.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Scripts/FixMaterials.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Scripts/FixMaterials.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Scripts/PasteManager.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Scripts/PasteManager.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Scripts/ShowSkeleton.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Scripts/ShowSkeleton.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/Arrow.png create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/Arrow.png.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/ArrowLeft.png create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/ArrowLeft.png.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/dropdown.png create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/dropdown.png.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/fountain.png create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/fountain.png.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/helpbutton.png create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/helpbutton.png.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/knob.png create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/knob.png.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/playbutton.png create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/playbutton.png.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/roundbutton.png create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/roundbutton.png.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/roundbuttonborder.png create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/roundbuttonborder.png.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/stopbutton.png create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/Common/Textures/stopbutton.png.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/ListModelResources.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/ListModelResources/ListModelResources.unity create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/ListModelResources/ListModelResources.unity.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/ListModelResources/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/ListModelResources/Scripts/ListModelResourcesSample.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/ListModelResources/Scripts/ListModelResourcesSample.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/LoadExtraAnimations.unity create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/LoadExtraAnimations.unity.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Models.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Models/BuddyBase.fbx create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Models/BuddyBase.fbx.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Models/BuddyIdle.fbx create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Models/BuddyIdle.fbx.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Models/BuddyJump.fbx create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Models/BuddyJump.fbx.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Models/BuddyWalk.fbx create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Models/BuddyWalk.fbx.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Scripts/LoadExtraAnimationsSample.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Scripts/LoadExtraAnimationsSample.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Source Models.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Source Models/Buddy.mlt create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Source Models/Buddy.mlt.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Source Models/BuddyIdle.mlt create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Source Models/BuddyIdle.mlt.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Source Models/BuddyJump.mlt create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Source Models/BuddyJump.mlt.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Source Models/BuddyWalk.mlt create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadExtraAnimations/Source Models/BuddyWalk.mlt.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFile.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFile/LoadModelFromFile.unity create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFile/LoadModelFromFile.unity.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFile/Models.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFile/Models/TriLibSampleModel.mtl create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFile/Models/TriLibSampleModel.mtl.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFile/Models/TriLibSampleModel.obj create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFile/Models/TriLibSampleModel.obj.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFile/Models/sampleTex.png create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFile/Models/sampleTex.png.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFile/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFile/Scripts/LoadModelFromFileSample.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFile/Scripts/LoadModelFromFileSample.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFilePicker.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFilePicker/LoadModelFromFilePicker.unity create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFilePicker/LoadModelFromFilePicker.unity.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFilePicker/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFilePicker/Scripts/LoadModelFromFilePickerSample.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromFilePicker/Scripts/LoadModelFromFilePickerSample.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/LoadModelFromStream.unity create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/LoadModelFromStream.unity.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/Mappers.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/Mappers/ExternalDataMapperSample.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/Mappers/ExternalDataMapperSample.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/Mappers/TextureMapperSample.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/Mappers/TextureMapperSample.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/Models.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/Models/TriLibSampleModel.mtl create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/Models/TriLibSampleModel.mtl.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/Models/TriLibSampleModel.obj create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/Models/TriLibSampleModel.obj.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/Models/sampleTex.png create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/Models/sampleTex.png.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/Scripts/LoadModelFromStreamSample.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromStream/Scripts/LoadModelFromStreamSample.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromURL.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromURL/LoadModelFromURL.unity create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromURL/LoadModelFromURL.unity.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromURL/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromURL/Scripts/LoadModelFromURLSample.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/LoadModelFromURL/Scripts/LoadModelFromURLSample.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/SimpleCustomAssetLoader.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/SimpleCustomAssetLoader/Mappers.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/SimpleCustomAssetLoader/Mappers/SimpleExternalDataMapper.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/SimpleCustomAssetLoader/Mappers/SimpleExternalDataMapper.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/SimpleCustomAssetLoader/Mappers/SimpleTextureMapper.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/SimpleCustomAssetLoader/Mappers/SimpleTextureMapper.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/SimpleCustomAssetLoader/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/SimpleCustomAssetLoader/Scripts/SimpleCustomLoaderSample.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/SimpleCustomAssetLoader/Scripts/SimpleCustomLoaderSample.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/SimpleCustomAssetLoader/SimpleCustomAssetLoaderSample.unity create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/SimpleCustomAssetLoader/SimpleCustomAssetLoaderSample.unity.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/SimpleCustomAssetLoader/Utils.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/SimpleCustomAssetLoader/Utils/SimpleCustomAssetLoader.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/SimpleCustomAssetLoader/Utils/SimpleCustomAssetLoader.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/UserPropertiesLoading.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/UserPropertiesLoading/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/UserPropertiesLoading/Scripts/UserPropertiesLoadingSample.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/UserPropertiesLoading/Scripts/UserPropertiesLoadingSample.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/UserPropertiesLoading/UserPropertiesLoadingSample.unity create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/UserPropertiesLoading/UserPropertiesLoadingSample.unity.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/UserPropertiesLoading/Utils.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/UserPropertiesLoading/Utils/SampleUserPropertiesMapper.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibSamples/UserPropertiesLoading/Utils/SampleUserPropertiesMapper.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibStandaloneFileBrowser/StandaloneFileBrowser/Editor.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibStandaloneFileBrowser/StandaloneFileBrowser/Editor/StandaloneFileBrowserPreprocessor.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibStandaloneFileBrowser/StandaloneFileBrowser/Editor/StandaloneFileBrowserPreprocessor.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/Licenses.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/Licenses/BitMiracle.LibTiff.Net.txt create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/Licenses/BitMiracle.LibTiff.Net.txt.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/Plugins.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/Plugins/BitMiracle.LibTiff.NET.dll create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/Plugins/BitMiracle.LibTiff.NET.dll.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/Sample.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/Sample/LoadModelWithTiffTextures.unity create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/Sample/LoadModelWithTiffTextures.unity.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/Sample/LoadModelWithTiffTexturesSettings.lighting create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/Sample/LoadModelWithTiffTexturesSettings.lighting.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/Sample/Scripts.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/Sample/Scripts/LoadModelWithTiffTextures.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/Sample/Scripts/LoadModelWithTiffTextures.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/TextureMapper.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/TextureMapper/TiffTextureMapper.cs create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibTiff/TextureMapper/TiffTextureMapper.cs.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibUniversalRP/Resources.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibUniversalRP/Resources/Mappers.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibUniversalRP/Resources/Mappers/UniversalRPMaterialMapper.asset create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibUniversalRP/Resources/Mappers/UniversalRPMaterialMapper.asset.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibUniversalRP/Resources/Materials.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibUniversalRP/Resources/Materials/UniversalRP.meta create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibUniversalRP/Resources/Materials/UniversalRP/UniversalRPVariantCollection.shadervariants create mode 100644 Assets/Scripts/ExternalAssets/TriLib/TriLibUniversalRP/Resources/Materials/UniversalRP/UniversalRPVariantCollection.shadervariants.meta rename Assets/{ => Scripts}/Panel_Toolbox.cs (100%) rename Assets/{ => Scripts}/Panel_Toolbox.cs.meta (100%) create mode 100644 Assets/Scripts/UVC/ScriptableRenderFeature.meta create mode 100644 Assets/Scripts/UVC/ScriptableRenderFeature/EdgeDetection.cs create mode 100644 Assets/Scripts/UVC/ScriptableRenderFeature/EdgeDetection.cs.meta create mode 100644 Assets/Scripts/UVC/ScriptableRenderFeature/New Material.mat create mode 100644 Assets/Scripts/UVC/ScriptableRenderFeature/New Material.mat.meta rename Assets/{ => Scripts}/UVCToggleButton.cs (100%) rename Assets/{ => Scripts}/UVCToggleButton.cs.meta (100%) create mode 100644 Assets/Shader.meta create mode 100644 Assets/Shader/Custom_EdgeDetectionOutline.mat create mode 100644 Assets/Shader/Custom_EdgeDetectionOutline.mat.meta create mode 100644 Assets/Shader/EdgeDetection.shader create mode 100644 Assets/Shader/EdgeDetection.shader.meta create mode 100644 Assets/Shader/EdgeOutline.shadergraph create mode 100644 Assets/Shader/EdgeOutline.shadergraph.meta create mode 100644 Assets/Shader/StandardOutline.mat create mode 100644 Assets/Shader/StandardOutline.mat.meta create mode 100644 Assets/Shader/StandardOutline.shadergraph create mode 100644 Assets/Shader/StandardOutline.shadergraph.meta diff --git a/Assets/Editor/TriLibCore/Scripts/AssetLoaderOptionsEditor.cs b/Assets/Editor/TriLibCore/Scripts/AssetLoaderOptionsEditor.cs index 441f3195..77cef6cc 100644 --- a/Assets/Editor/TriLibCore/Scripts/AssetLoaderOptionsEditor.cs +++ b/Assets/Editor/TriLibCore/Scripts/AssetLoaderOptionsEditor.cs @@ -1,5 +1,4 @@ using TriLibCore.General; -using TriLibCore.Mappers; using UnityEditor; using UnityEngine; @@ -49,76 +48,137 @@ namespace TriLibCore.Editor { case 0: GUILayout.Label(new GUIContent("Scene", "Scene import settings"), "BoldLabel"); - EditorGUILayout.PropertyField(serializedObject.FindProperty("ScaleFactor"), new GUIContent("Scale Factor", "Model scale multiplier.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("UseFileScale"), new GUIContent("Use File Scale", "Turn on this flag to use the file original scale.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("ImportVisibility"), new GUIContent("Import Visibility", "Turn on this field to apply the visibility property to Mesh Renderers/Skinned Mesh Renderers.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("ImportCameras"), new GUIContent("Import Cameras", "Turn on this field to enable Cameras importing.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("ImportLights"), new GUIContent("Import Lights", "Turn on this field to enable Lights importing.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("Static"), new GUIContent("Import as Static", "Turn on this field to import the Model as a static Game Object.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("SortHierarchyByName"), new GUIContent("Sort Hierarchy by Name", "Turn on this field to sort the Model hierarchy by name.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("AddAssetUnloader"), new GUIContent("Add Asset Unloader", "Turn on this field to add the Asset Unloader Component to the loaded Game Object.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("ShowLoadingWarnings"), new GUIContent("Show Loading Warnings", "Turn on this field to display Model loading warnings on the Console.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("CloseStreamAutomatically"), new GUIContent("Close Stream Automatically", "Turn on this field to close the Model loading Stream automatically.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("DestroyOnError"), new GUIContent("Destroy on Error", "Turn on this field to destroy the loaded Game Object automatically when there is any loading error.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("PivotPosition"), new GUIContent("Pivot Position", "Use this field to realign the Model pivot based on the given value.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("DisableObjectsRenaming"), new GUIContent("Disable Objects Renaming", "Turn on this field to disable objects renaming.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("MergeSingleChild"), new GUIContent("Merge Single Child", "Turn on this field to merge single child models into a single GameObject.")); - + EditorGUILayout.PropertyField(serializedObject.FindProperty("ScaleFactor"), + new GUIContent("Scale Factor", "Model scale multiplier.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("UseFileScale"), + new GUIContent("Use File Scale", "Turn on this flag to use the file's original scale.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ImportVisibility"), + new GUIContent("Import Visibility", "Turn on this field to apply the visibility property to Mesh Renderers/Skinned Mesh Renderers.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ImportCameras"), + new GUIContent("Import Cameras", "Turn on this field to enable camera importing.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ImportLights"), + new GUIContent("Import Lights", "Turn on this field to enable light importing.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("Static"), + new GUIContent("Import as Static", "Turn on this field to import the Model as a static Game Object.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("SortHierarchyByName"), + new GUIContent("Sort Hierarchy by Name", "Turn on this field to sort the Model hierarchy by name.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("AddAssetUnloader"), + new GUIContent("Add Asset Unloader", "Turn on this field to add the Asset Unloader Component to the loaded Game Object.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("CloseStreamAutomatically"), + new GUIContent("Close Stream Automatically", "Turn on this field to close the Model loading Stream automatically.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("DestroyOnError"), + new GUIContent("Destroy on Error", "Turn on this field to destroy the loaded Game Object automatically when there is any loading error.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("PivotPosition"), + new GUIContent("Pivot Position", "Use this field to realign the Model pivot based on the given value.")); + var disableObjectsRenamingProperty = serializedObject.FindProperty("DisableObjectsRenaming"); + EditorGUILayout.PropertyField(disableObjectsRenamingProperty, + new GUIContent("Disable Object Renaming", "Turn on this field to disable object renaming.")); + if (!disableObjectsRenamingProperty.boolValue) + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("MaxObjectsToRename"), + new GUIContent("Max Objects to Rename", + "Use this field to set the maximum number of objects TriLib can rename. Renaming is an expensive process, so it's advised to keep this value low.")); + } + EditorGUILayout.PropertyField(serializedObject.FindProperty("MergeSingleChild"), + new GUIContent("Merge Single Child", "Turn on this field to merge single-child models into a single GameObject.")); EditorGUILayout.Space(); GUILayout.Label(new GUIContent("Meshes", "Global settings for generated meshes"), "BoldLabel"); var importMeshesProperty = serializedObject.FindProperty("ImportMeshes"); - EditorGUILayout.PropertyField(importMeshesProperty, new GUIContent("Import Meshes", "Turn on this field to import Model Meshes.")); + EditorGUILayout.PropertyField(importMeshesProperty, + new GUIContent("Import Meshes", "Turn on this field to import Model Meshes.")); if (importMeshesProperty.boolValue) { - EditorGUILayout.PropertyField(serializedObject.FindProperty("MarkMeshesAsDynamic"), new GUIContent("Mark Meshes as Dynamic", "Turn on this field to mark created meshes as dynamic.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("MarkMeshesAsDynamic"), + new GUIContent("Mark Meshes as Dynamic", "Turn on this field to mark created meshes as dynamic.")); var generateCollidersProperty = serializedObject.FindProperty("GenerateColliders"); - EditorGUILayout.PropertyField(generateCollidersProperty, new GUIContent("Generate Colliders", "Turn on this field to generate Colliders for imported Meshes.")); + EditorGUILayout.PropertyField(generateCollidersProperty, + new GUIContent("Generate Colliders", "Turn on this field to generate Colliders for imported Meshes.")); if (generateCollidersProperty.boolValue) { - EditorGUILayout.PropertyField(serializedObject.FindProperty("ConvexColliders"), new GUIContent("Convex Colliders", "Turn on this field to generate convex Colliders when the GenerateColliders field is enabled.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ConvexColliders"), + new GUIContent("Convex Colliders", "Turn on this field to generate convex Colliders when GenerateColliders is enabled.")); } - EditorGUILayout.PropertyField(serializedObject.FindProperty("IndexFormat"), new GUIContent("Index Format", "Mesh index format (16 or 32 bits).")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("KeepQuads"), new GUIContent("Keep Quads", "Turn on this field to mantain Mesh quads (Useful for DX11 tesselation).")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("MergeVertices"), new GUIContent("Merge Vertices", "Turn on this field to merge model duplicated vertices where possible.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("IndexFormat"), + new GUIContent("Index Format", "Mesh index format (16 or 32 bits).")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("KeepQuads"), + new GUIContent("Keep Quads", "Turn on this field to maintain Mesh quads (useful for DX11 tessellation).")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("MergeVertices"), + new GUIContent("Merge Vertices", "Turn on this field to merge model duplicated vertices where possible.")); var importNormalsProperty = serializedObject.FindProperty("ImportNormals"); - EditorGUILayout.PropertyField(importNormalsProperty, new GUIContent("Import Normals", "Turn on this field to import Mesh normals. If not enabled, normals will be calculated instead.")); + EditorGUILayout.PropertyField(importNormalsProperty, + new GUIContent("Import Normals", "Turn on this field to import Mesh normals. If disabled, normals will be calculated instead.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("BakeAxisConversion"), + new GUIContent("Bake Axis Conversion", "Turn on this field to bake the model transform into models and animations (Experimental).")); + var generateNormalsProperty = serializedObject.FindProperty("GenerateNormals"); if (generateNormalsProperty.boolValue) { - EditorGUILayout.PropertyField(generateNormalsProperty, new GUIContent("Generate Normals", "Turn off this field to disable Mesh normals generation.")); + EditorGUILayout.PropertyField(generateNormalsProperty, + new GUIContent("Generate Normals", "Turn off this field to disable Mesh normals generation.")); var useUnityNativeNormalCalculatorProperty = serializedObject.FindProperty("UseUnityNativeNormalCalculator"); - EditorGUILayout.PropertyField(useUnityNativeNormalCalculatorProperty, new GUIContent("Use Unity Native Normal Calculator", "Turn on this field to use the builtin Unity normal calculator.")); + EditorGUILayout.PropertyField(useUnityNativeNormalCalculatorProperty, + new GUIContent("Use Unity Native Normal Calculator", "Turn on this field to use the built-in Unity normal calculator.")); if (!useUnityNativeNormalCalculatorProperty.boolValue) { - EditorGUILayout.Slider(serializedObject.FindProperty("SmoothingAngle"), 0f, 180f, new GUIContent("Smoothing Angle", "Normals calculation smoothing angle.")); + EditorGUILayout.Slider(serializedObject.FindProperty("SmoothingAngle"), 0f, 180f, + new GUIContent("Smoothing Angle", "Normals calculation smoothing angle.")); } } var importBlendShapesProperty = serializedObject.FindProperty("ImportBlendShapes"); - EditorGUILayout.PropertyField(importBlendShapesProperty, new GUIContent("Import Blend Shapes", "Turn on this field to import Mesh Blend Shapes.")); + EditorGUILayout.PropertyField(importBlendShapesProperty, + new GUIContent("Import Blend Shapes", "Turn on this field to import Mesh Blend Shapes.")); if (importBlendShapesProperty.boolValue) { - EditorGUILayout.PropertyField(serializedObject.FindProperty("ImportBlendShapeNormals"), new GUIContent("Import Blend Shape Normals", "Turn on this field to import Mesh Blend Shape normals.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("CalculateBlendShapeNormals"), new GUIContent("Calculate Blend Shape Normals", "Turn on this field to calculate Mesh Blend Shape normals when none can be imported.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ImportBlendShapeNormals"), + new GUIContent("Import Blend Shape Normals", "Turn on this field to import Mesh Blend Shape normals.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("CalculateBlendShapeNormals"), + new GUIContent("Calculate Blend Shape Normals", + "Turn on this field to calculate Mesh Blend Shape normals when none are available in the file.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("BlendShapeMapper"), + new GUIContent("Blend Shape Mapper", + "Use this field to set a BlendShapeMapper to use with the loaded model. BlendShapeMappers can replace the Unity built-in blend shape playback system.")); } - EditorGUILayout.PropertyField(serializedObject.FindProperty("ImportColors"), new GUIContent("Import Colors", "Turn on this field to import Mesh Colors.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ImportColors"), + new GUIContent("Import Colors", "Turn on this field to import Mesh colors.")); var importTangentsProperty = serializedObject.FindProperty("ImportTangents"); - EditorGUILayout.PropertyField(importTangentsProperty, new GUIContent("Import Tangents", "Turn on this field to import Mesh tangents. If not enabled, tangents will be calculated instead.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("GenerateTangents"), new GUIContent("Generate Tangents", "Turn off this field to disable Mesh tangents generation.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("SwapUVs"), new GUIContent("Swap UVs", "Turn on this field to swap Mesh UVs. (uv1 into uv2)")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("LODScreenRelativeTransitionHeightBase"), new GUIContent("LOD Screen Relative Transition Height Base", "Defines the initial screen relative transition height when creating LOD Groups.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("ReadEnabled"), new GUIContent("Read Enabled", "Turn on this field to make mesh CPU data readable.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("DisableTesselation"), new GUIContent("Disable Tesselation", "Turn on this field to disable polygon tesselation.")); + EditorGUILayout.PropertyField(importTangentsProperty, + new GUIContent("Import Tangents", + "Turn on this field to import Mesh tangents. If disabled, tangents will be calculated instead.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("GenerateTangents"), + new GUIContent("Generate Tangents", "Turn off this field to disable Mesh tangents generation.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("SwapUVs"), + new GUIContent("Swap UVs", "Turn on this field to swap Mesh UVs (uv1 into uv2).")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("LODScreenRelativeTransitionHeightBase"), + new GUIContent("LOD Screen Relative Transition Height Base", + "Defines the initial screen relative transition height when creating LOD Groups.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ReadEnabled"), + new GUIContent("Read Enabled", "Turn on this field to make mesh CPU data readable.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("DisableTesselation"), + new GUIContent("Disable Tessellation", "Turn on this field to disable polygon tessellation.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("UseSharedMeshes"), + new GUIContent("Use Shared Meshes", + "Turn off this field to use the mesh filter's \"mesh\" property instead of the \"sharedMesh\" property.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("MeshWorldTransform"), + new GUIContent("Mesh World Transform", + "Use this field to define a transformation applied in world space to all mesh vertices.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("UpdateSkinnedMeshRendererWhenOffscreen"), + new GUIContent("Update Skinned Mesh Renderer when Offscreen", + "Turn on this field to update SkinnedMeshRenderers when they're offscreen.")); } var loadPointCloudsProperty = serializedObject.FindProperty("LoadPointClouds"); - EditorGUILayout.PropertyField(loadPointCloudsProperty, new GUIContent("Load Point Clouds", "TTurn on this field to load the model as a Point Cloud (PLY and OBJ only)")); + EditorGUILayout.PropertyField(loadPointCloudsProperty, + new GUIContent("Load Point Clouds", + "Turn on this field to load the model as a point cloud (PLY and OBJ only).")); if (!loadPointCloudsProperty.boolValue) { - EditorGUILayout.PropertyField(serializedObject.FindProperty("OptimizeMeshes"), new GUIContent("Optimize Meshes", "Turn on this field to optimize imported Meshes for GPU access.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("OptimizeMeshes"), + new GUIContent("Optimize Meshes", "Turn on this field to optimize imported Meshes for GPU access.")); } break; case 1: var animationTypeProperty = serializedObject.FindProperty("AnimationType"); - EditorGUILayout.PropertyField(animationTypeProperty, new GUIContent("Animation Type", "Model rigging type.")); + EditorGUILayout.PropertyField(animationTypeProperty, + new GUIContent("Animation Type", "Model rigging type.")); var animationType = (AnimationType)animationTypeProperty.intValue; switch (animationType) { @@ -126,98 +186,181 @@ namespace TriLibCore.Editor case AnimationType.Humanoid: var avatarDefinitionTypeProperty = serializedObject.FindProperty("AvatarDefinition"); - EditorGUILayout.PropertyField(avatarDefinitionTypeProperty, new GUIContent("Avatar Definition", "Type of avatar creation for the Model.")); + EditorGUILayout.PropertyField(avatarDefinitionTypeProperty, + new GUIContent("Avatar Definition", "Type of avatar creation for the Model.")); var avatarDefinitionType = (AvatarDefinitionType)avatarDefinitionTypeProperty.intValue; switch (avatarDefinitionType) { case AvatarDefinitionType.CreateFromThisModel: if (animationType == AnimationType.Humanoid) { - EditorGUILayout.PropertyField(serializedObject.FindProperty("HumanDescription"), new GUIContent("Human Description", "Human Description used to create the humanoid Avatar, when the humanoid rigging type is selected.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("SampleBindPose"), new GUIContent("Sample Bind Pose", "Turn on this field to enforce the loaded Model to the bind-pose when rigging.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("EnforceTPose"), new GUIContent("Enforce T-Pose", "Turn on this field to enforce the loaded Model to the t-pose when rigging.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("HumanoidAvatarMapper"), new GUIContent("Humanoid Avatar Mapper", "Mapper used to map the humanoid Avatar, when the humanoid rigging type is selected.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("HumanDescription"), + new GUIContent("Human Description", + "Human Description used to create the humanoid Avatar, when the humanoid rigging type is selected.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("SampleBindPose"), + new GUIContent("Sample Bind Pose", + "Turn on this field to enforce the loaded Model to the bind-pose when rigging.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("EnforceTPose"), + new GUIContent("Enforce T-Pose", + "Turn on this field to enforce the loaded Model to a T-pose when rigging.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("HumanoidAvatarMapper"), + new GUIContent("Humanoid Avatar Mapper", + "Mapper used to map the humanoid Avatar when the humanoid rigging type is selected.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ApplyAvatarHipsCompensation"), + new GUIContent("Apply Avatar Hips Compensation", + "Turn off this field if your avatars seem to hover over the ground. This disables avatar hips height compensation.")); } break; case AvatarDefinitionType.CopyFromOtherAvatar: - EditorGUILayout.PropertyField(serializedObject.FindProperty("Avatar"), new GUIContent("Source", "Source Avatar to use when copying from other Avatar.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("Avatar"), + new GUIContent("Source", "Source Avatar to use when copying from another Avatar.")); break; } break; case AnimationType.Legacy: - EditorGUILayout.PropertyField(serializedObject.FindProperty("AutomaticallyPlayLegacyAnimations"), new GUIContent("Play Legacy Animations Automatically", "Turn on this field to play Legacy Animation Clips automatically (The first available Clip will be played).")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("EnforceAnimatorWithLegacyAnimations"), new GUIContent("Enforce Animator with Legacy Animations", "Turn on this field to add an Animator when the AnimationType is set to Legacy.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("AutomaticallyPlayLegacyAnimations"), + new GUIContent("Play Legacy Animations Automatically", + "Turn on this field to play Legacy Animation Clips automatically (The first available Clip will be played).")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("EnforceAnimatorWithLegacyAnimations"), + new GUIContent("Enforce Animator with Legacy Animations", + "Turn on this field to add an Animator when the AnimationType is set to Legacy.")); break; } if (animationType != AnimationType.None) { - EditorGUILayout.PropertyField(serializedObject.FindProperty("RootBoneMapper"), new GUIContent("Root Bone Mapper", "Mapper used to find the Model root bone.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("RootBoneMapper"), + new GUIContent("Root Bone Mapper", "Mapper used to find the Model root bone.")); } break; case 2: animationTypeProperty = serializedObject.FindProperty("AnimationType"); animationType = (AnimationType)animationTypeProperty.intValue; - //todo: add constraints if (animationType != AnimationType.None) { - EditorGUILayout.PropertyField(serializedObject.FindProperty("EnsureQuaternionContinuity"), new GUIContent("Ensure Quaternion Continuity", "Turn on this field to realign quaternion keys to ensure shortest interpolation paths.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("ResampleFrequency"), new GUIContent("Resample Frequency", "Defines the FBX Rotation Animation Curve resampling frequency. (1 = every frame, 2 = every 2 frames, 3 = every 3 frames and so on)")); - //todo: add keyframe reduction - EditorGUILayout.PropertyField(serializedObject.FindProperty("AnimationWrapMode"), new GUIContent("Wrap Mode", "Default wrap-mode to apply to Animations.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("AnimationClipMappers"), new GUIContent("Animation Clip Mappers", "Mappers used to process Animation Clips.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("AddAllBonesToSkinnedMeshRenderers"), new GUIContent("Add all Bones to Skinned Mesh Renderers", "Turn on this field to add all available bones to every created SkinnedMeshRenderer.")); - + EditorGUILayout.PropertyField(serializedObject.FindProperty("EnsureQuaternionContinuity"), + new GUIContent("Ensure Quaternion Continuity", + "Turn on this field to realign quaternion keys to ensure the shortest interpolation paths.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ResampleFrequency"), + new GUIContent("Resample Frequency", + "Defines the FBX Rotation Animation Curve resampling frequency. (1 = every frame, 2 = every 2 frames, etc.)")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("AnimationWrapMode"), + new GUIContent("Wrap Mode", "Default wrap-mode to apply to Animations.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("AnimationClipMappers"), + new GUIContent("Animation Clip Mappers", "Mappers used to process Animation Clips.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("AddAllBonesToSkinnedMeshRenderers"), + new GUIContent("Add All Bones to Skinned Mesh Renderers", + "Turn on this field to add all available bones to every created SkinnedMeshRenderer.")); } break; case 3: var importMaterialsProperty = serializedObject.FindProperty("ImportMaterials"); - EditorGUILayout.PropertyField(importMaterialsProperty, new GUIContent("Import Materials", "Turn on this field to import Materials.")); + EditorGUILayout.PropertyField(importMaterialsProperty, + new GUIContent("Import Materials", "Turn on this field to import Materials.")); if (importMaterialsProperty.boolValue) { - EditorGUILayout.PropertyField(serializedObject.FindProperty("UseMaterialKeywords"), new GUIContent("Use Material Keywords", "Turn on this field to enable/disable created Material Keywords based on the source native Materials.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("AlphaMaterialMode"), new GUIContent("Alpha Material Mode", "Chooses the way TriLib creates alpha materials.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("MaterialMappers"), new GUIContent("Material Mappers", "Mappers used to create suitable Unity Materials from original Materials.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("DoubleSidedMaterials"), new GUIContent("Double Sided Materials", "Turn on this field to create double-sided Materials (TriLib does that by duplicating the original Meshes).")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("SetUnusedTexturePropertiesToNull"), new GUIContent("Set unused Texture Properties to Null", "Turn on this field to set the unused Material Texture Properties to null.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("CreateMaterialsForAllModels"), new GUIContent("Create Materials for all Models", "Turn on this field to make TriLib create materials for every loaded model, even models without an original material.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("UseMaterialKeywords"), + new GUIContent("Use Material Keywords", + "Turn on this field to enable/disable created Material keywords based on the source native materials.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("AlphaMaterialMode"), + new GUIContent("Alpha Material Mode", "Chooses the way TriLib creates alpha materials.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("MaterialMappers"), + new GUIContent("Material Mappers", "Mappers used to create suitable Unity Materials from original Materials.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("DoubleSidedMaterials"), + new GUIContent("Double-Sided Materials", + "Turn on this field to create double-sided Materials (TriLib does that by duplicating the original Meshes).")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("SetUnusedTexturePropertiesToNull"), + new GUIContent("Set Unused Texture Properties to Null", + "Turn on this field to set unused Material Texture Properties to null.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("UseSharedMaterials"), + new GUIContent("Use Shared Materials", + "Turn on this field to use the renderers' \"sharedMaterials\" property instead of \"materials\".")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("DoPBRConversion"), + new GUIContent("Do PBR Conversion", + "Turn off this field to disable Phong to PBR conversion.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ApplyGammaCurveToMaterialColors"), + new GUIContent("Apply Gamma Curve to Material Colors", + "When this field is on, TriLib will also apply the gamma curve to the material colors.")); + } break; case 4: var importTexturesProperty = serializedObject.FindProperty("ImportTextures"); - EditorGUILayout.PropertyField(importTexturesProperty, new GUIContent("Import Textures", "Turn on this field to import Textures.")); + EditorGUILayout.PropertyField(importTexturesProperty, + new GUIContent("Import Textures", "Turn on this field to import Textures.")); if (importTexturesProperty.boolValue) { - EditorGUILayout.PropertyField(serializedObject.FindProperty("TextureMappers"), new GUIContent("Texture Mappers", "Mappers used to find native Texture Streams from custom sources.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("TextureCompressionQuality"), new GUIContent("Texture Compression Quality", "Texture compression to apply on loaded Textures.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("GenerateMipmaps"), new GUIContent("Generate Mipmaps", "Turn on this field to enable Textures mip-map generation.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("FixNormalMaps"), new GUIContent("Fix Normal Maps", "Turn on this field to change normal map channels order to ABBR instead of RGBA.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("EnforceAlphaChannelTextures"), new GUIContent("Enforce Alpha Channel Textures", "Turn on this field to enforce alpha channel on textures creation.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("TextureMappers"), + new GUIContent("Texture Mappers", "Mappers used to find native Texture Streams from custom sources.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("TextureCompressionQuality"), + new GUIContent("Texture Compression Quality", + "Texture compression to apply on loaded Textures.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("GenerateMipmaps"), + new GUIContent("Generate Mipmaps", "Turn on this field to enable Texture mipmap generation.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("FixNormalMaps"), + new GUIContent("Fix Normal Maps", + "Turn on this field to change the normal map channel order to ABBR instead of RGBA.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("EnforceAlphaChannelTextures"), + new GUIContent("Enforce Alpha Channel Textures", + "Turn on this field to enforce an alpha channel on texture creation.")); var alphaMaterialModeProperty = serializedObject.FindProperty("AlphaMaterialMode"); if (alphaMaterialModeProperty.enumValueIndex > 0) { - EditorGUILayout.PropertyField(serializedObject.FindProperty("ScanForAlphaPixels"), new GUIContent("Scan for Alpha Pixels", "Turn on this field to scan Textures for alpha-blended pixels in order to generate transparent Materials.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ScanForAlphaPixels"), + new GUIContent("Scan for Alpha Pixels", + "Turn on this field to scan textures for alpha-blended pixels to generate transparent Materials.")); } - EditorGUILayout.PropertyField(serializedObject.FindProperty("LoadTexturesAsSRGB"), new GUIContent("Load Textures as sRGB", "Turn off this field to load textures as linear, instead of sRGB.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("ApplyGammaCurveToMaterialColors"), new GUIContent("Apply Gamma Curve to Material Colors", "When this field is on, TriLib will also apply the gamma curve to the material colors.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("ApplyTexturesOffsetAndScaling"), new GUIContent("Apply Textures Offset and Scaling", "Turn on this field to apply Textures offset and scaling.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("DiscardUnusedTextures"), new GUIContent("Discard Unused Textures", "Turn off this field to keep unused Textures.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("ForcePowerOfTwoTextures"), new GUIContent("Force Power of Two Textures", "Turn on this field to enforce power of two resolution when loading textures (needed for texture compression and in some platforms).")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("UseUnityNativeTextureLoader"), new GUIContent("Use Unity Native Texture Loader", "Turn on this field to use Unity builtin Texture loader instead of stb_image.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("MaxTexturesResolution"), new GUIContent("Max Textures Resolution", "Use this field to limit textures resolution. Textures with resolutions higher than this value (when the value is not zero) will not be loaded.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("ConvertMaterialTexturesUsingHalfRes"), new GUIContent("Convert Material Textures using Half Res", "Turn off this field to generate the \"Metallic/Smoothness/Specular/Roughness\" textures with the full original resolution.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("LoadTexturesAsSRGB"), + new GUIContent("Load Textures as sRGB", + "Turn off this field to load textures as linear instead of sRGB.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ApplyTexturesOffsetAndScaling"), + new GUIContent("Apply Textures Offset and Scaling", + "Turn on this field to apply texture offset and scaling.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("DiscardUnusedTextures"), + new GUIContent("Discard Unused Textures", + "Turn off this field to keep unused Textures.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ForcePowerOfTwoTextures"), + new GUIContent("Force Power of Two Textures", + "Turn on this field to enforce power-of-two resolution when loading textures (needed for compression on some platforms).")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("UseUnityNativeTextureLoader"), + new GUIContent("Use Unity Native Texture Loader", + "Turn on this field to use the Unity built-in Texture loader instead of stb_image.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("MaxTexturesResolution"), + new GUIContent("Max Textures Resolution", + "Use this field to limit texture resolution. Textures with resolutions higher than this value (when not zero) will not be loaded.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ConvertMaterialTexturesUsingHalfRes"), + new GUIContent("Convert Material Textures Using Half Res", + "Turn off this field to generate the \"Metallic/Smoothness/Specular/Roughness\" textures at their full original resolution.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("LoadDisplacementTextures"), + new GUIContent("Load Displacement Textures", + "Turn on this field to load displacement textures.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("LoadTexturesViaWebRequest"), + new GUIContent("Load Textures via Web Request", + "Turn on this field to load textures using the UnityWebRequest class (experimental). " + + "UnityWebRequest is the fastest way to load PNG/JPG textures but uses more memory.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ConvertTexturesAs2D"), + new GUIContent("Convert Textures as 2D", + "Turn off this field to keep processed/composed textures as RenderTextures.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ApplyTransparencyTexture"), + new GUIContent("Apply Transparency Texture", + "Turn off this field to disable composing the Albedo texture using the original material's transparency texture.")); - } break; case 5: - EditorGUILayout.PropertyField(serializedObject.FindProperty("ExternalDataMapper"), new GUIContent("External Data Mapper", "Mapper used to find data Streams on external sources.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("UserPropertiesMapper"), new GUIContent("User Properties Mapper", " Mapper used to process User Properties from Models.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("LipSyncMappers"), new GUIContent("Lip Sync Mappers", "Mappers used to configure Lip-Sync Blend Shapes.")); - EditorGUILayout.PropertyField(serializedObject.FindProperty("NameMapper"), new GUIContent("Name Mapper", "This class can be inherited and used to generate Game Object naming based on file-format model specific data.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("ExternalDataMapper"), + new GUIContent("External Data Mapper", "Mapper used to find data Streams on external sources.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("UserPropertiesMapper"), + new GUIContent("User Properties Mapper", "Mapper used to process User Properties from Models.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("LipSyncMappers"), + new GUIContent("Lip Sync Mappers", "Mappers used to configure Lip-Sync Blend Shapes.")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("NameMapper"), + new GUIContent("Name Mapper", + "This class can be inherited and used to generate GameObject naming based on file-format model-specific data.")); break; } EditorGUILayout.EndVertical(); serializedObject.ApplyModifiedProperties(); } + } } \ No newline at end of file diff --git a/Assets/Editor/TriLibCore/Scripts/AssetLoaderOptionsEditor.cs.meta b/Assets/Editor/TriLibCore/Scripts/AssetLoaderOptionsEditor.cs.meta index 0cb31018..8c920d90 100644 --- a/Assets/Editor/TriLibCore/Scripts/AssetLoaderOptionsEditor.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/AssetLoaderOptionsEditor.cs.meta @@ -1,3 +1,10 @@ fileFormatVersion: 2 guid: e964c5e158b24dc6ad03b0a14c2ef811 -timeCreated: 1573053965 \ No newline at end of file +timeCreated: 1573053965 +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/AssetLoaderOptionsEditor.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/BuildProcessor.cs b/Assets/Editor/TriLibCore/Scripts/BuildProcessor.cs index c1d9cff7..6515f05a 100644 --- a/Assets/Editor/TriLibCore/Scripts/BuildProcessor.cs +++ b/Assets/Editor/TriLibCore/Scripts/BuildProcessor.cs @@ -1,15 +1,13 @@ -using System; -using UnityEditor; +using UnityEditor; using UnityEditor.Build; using UnityEditor.Build.Reporting; using UnityEngine; -using Debug = UnityEngine.Debug; namespace TriLibCore.Editor { public class BuildProcessor : IPreprocessBuildWithReport { - public int callbackOrder => -1000; + public int callbackOrder => 0; public void OnPreprocessBuild(BuildReport report) { @@ -18,44 +16,17 @@ namespace TriLibCore.Editor #else PlayerSettings.WebGL.threadsSupport = false; #endif + if (!Application.isBatchMode) + { #if UNITY_WSA - if (!Application.isBatchMode && !PlayerSettings.WSA.GetCapability(PlayerSettings.WSACapability.RemovableStorage) && EditorUtility.DisplayDialog( - "TriLib", "TriLib cache system needs the [RemovableStorage] WSA Capacity enabled. Do you want to enable it?", "Yes", "No")) + if (!PlayerSettings.WSA.GetCapability(PlayerSettings.WSACapability.RemovableStorage) && EditorUtility.DisplayDialog( + "TriLib", "TriLib cache system needs the [RemovableStorage] WSA Capacity enabled. Do you want to enable it now?", "Yes", "No")) { PlayerSettings.WSA.SetCapability(PlayerSettings.WSACapability.RemovableStorage, true); } #endif - var waitingMappers = false; - string materialMapper = null; - var arguments = Environment.GetCommandLineArgs(); - for (var i = 0; i < arguments.Length; i++) - { - var argument = arguments[i]; - if (waitingMappers) - { - materialMapper = argument; - continue; - } - - switch (argument) - { - case "-trilib_mappers": - { - waitingMappers = true; - break; - } - } - } - - if (materialMapper is object) - { - Debug.Log($"Using the given material mapper:{materialMapper}."); - CheckMappers.SelectMapper(materialMapper); - } - else - { - CheckMappers.Initialize(); } + CheckMappers.EnableCompatibleMaterialMapperIfNeeded(); } } } \ No newline at end of file diff --git a/Assets/Editor/TriLibCore/Scripts/BuildProcessor.cs.meta b/Assets/Editor/TriLibCore/Scripts/BuildProcessor.cs.meta index 70659bd8..2c7aebe9 100644 --- a/Assets/Editor/TriLibCore/Scripts/BuildProcessor.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/BuildProcessor.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d556beac2d22e38459a0060666d79950 +guid: 48732532528e378478a056f14449aa64 MonoImporter: externalObjects: {} serializedVersion: 2 @@ -9,3 +9,10 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/BuildProcessor.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/ByNameHumanoidAvatarMapperEditor.cs b/Assets/Editor/TriLibCore/Scripts/ByNameHumanoidAvatarMapperEditor.cs new file mode 100644 index 00000000..663b802f --- /dev/null +++ b/Assets/Editor/TriLibCore/Scripts/ByNameHumanoidAvatarMapperEditor.cs @@ -0,0 +1,41 @@ +using System; +using TriLibCore.General; +using TriLibCore.Mappers; +using UnityEditor; +using UnityEngine; + + +namespace TriLibCore.Editor +{ + [CustomEditor(typeof(ByNameHumanoidAvatarMapper))] + public class ByNameHumanoidAvatarMapperEditor : UnityEditor.Editor + { + private bool[] _folded = new bool[2]; + + public override void OnInspectorGUI() + { + _folded[0] = EditorGUILayout.BeginFoldoutHeaderGroup(_folded[0], "String Comparison"); + if (_folded[0]) + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("stringComparisonMode")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("CaseInsensitive")); + } + EditorGUILayout.EndFoldoutHeaderGroup(); + _folded[1] = EditorGUILayout.BeginFoldoutHeaderGroup(_folded[1], "Bones Mapping"); + EditorGUILayout.EndFoldoutHeaderGroup(); + if (_folded[1]) + { + var bonesMapping = serializedObject.FindProperty("BonesMapping"); + for (var i = 0; i < bonesMapping.arraySize; i++) + { + var boneMapping = bonesMapping.GetArrayElementAtIndex(i); + var humanBone = boneMapping.FindPropertyRelative("HumanBone"); + var enumDisplayNames = humanBone.enumDisplayNames; + var boneNames = boneMapping.FindPropertyRelative("BoneNames"); + EditorGUILayout.PropertyField(boneNames, new GUIContent(enumDisplayNames[humanBone.enumValueIndex])); + } + } + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Assets/Editor/TriLibCore/Scripts/ByNameHumanoidAvatarMapperEditor.cs.meta b/Assets/Editor/TriLibCore/Scripts/ByNameHumanoidAvatarMapperEditor.cs.meta new file mode 100644 index 00000000..0b2428e7 --- /dev/null +++ b/Assets/Editor/TriLibCore/Scripts/ByNameHumanoidAvatarMapperEditor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: ae81488757bd60e4db304d3c72f0cfde +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/ByNameHumanoidAvatarMapperEditor.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/CheckMappers.cs b/Assets/Editor/TriLibCore/Scripts/CheckMappers.cs index 23049214..63956e4a 100644 --- a/Assets/Editor/TriLibCore/Scripts/CheckMappers.cs +++ b/Assets/Editor/TriLibCore/Scripts/CheckMappers.cs @@ -5,71 +5,72 @@ using UnityEngine; namespace TriLibCore.Editor { + /// + /// Represents a series of Material Mapper utility methods. + /// + [InitializeOnLoad] public static class CheckMappers { - [InitializeOnEnterPlayMode] - [InitializeOnLoadMethod] - public static void Initialize() + [MenuItem("Tools/TriLib/Select Material Mappers based on Rendering Pipeline")] + private static void AutoSelect() { - var hasAnyMapper = false; + string materialMapperName; + for (var i = 0; i < MaterialMapper.RegisteredMappers.Count; i++) + { + materialMapperName = MaterialMapper.RegisteredMappers[i]; + TriLibSettings.SetBool(materialMapperName, false); + } + materialMapperName = AssetLoader.GetCompatibleMaterialMapperName(); + SelectMapper(materialMapperName); + } + + /// + /// Enables a compatible Material Mapper if none is found. + /// + public static void EnableCompatibleMaterialMapperIfNeeded() + { + string materialMapperName; + for (var i = 0; i < MaterialMapper.RegisteredMappers.Count; i++) + { + materialMapperName = MaterialMapper.RegisteredMappers[i]; + if (TriLibSettings.GetBool(materialMapperName, false)) + { + return; + } + } + EnableCompatibleMaterialMapper(); + } + + /// + /// Tries to find the best Material Mapper depending on the Rendering Pipeline. + /// + public static void EnableCompatibleMaterialMapper() + { + var usingMaterialMapper = false; for (var i = 0; i < MaterialMapper.RegisteredMappers.Count; i++) { var materialMapperName = MaterialMapper.RegisteredMappers[i]; if (TriLibSettings.GetBool(materialMapperName)) { - hasAnyMapper = true; + usingMaterialMapper = true; break; } } - - if (!hasAnyMapper) + if (!usingMaterialMapper) { - string materialMapper; - if (GraphicsSettingsUtils.IsUsingHDRPPipeline) - { - materialMapper = "HDRPMaterialMapper"; - } - else if (GraphicsSettingsUtils.IsUsingUniversalPipeline) - { - materialMapper = "UniversalRPMaterialMapper"; - } - else - { - materialMapper = "StandardMaterialMapper"; - } - Debug.Log($"TriLib is configured to use the '{materialMapper}' Material Mapper. If you want to use different Material Mappers, you can change this setting on the Project Settings/TriLib area."); - TriLibSettings.SetBool(materialMapper, true); + var materialMapperName = AssetLoader.GetCompatibleMaterialMapperName(); + SelectMapper(materialMapperName); } } - [MenuItem("Tools/TriLib/Select Material Mappers based on Rendering Pipeline")] - public static void AutoSelect() + static CheckMappers() { - for (var i = 0; i < MaterialMapper.RegisteredMappers.Count; i++) - { - var materialMapperName = MaterialMapper.RegisteredMappers[i]; - TriLibSettings.SetBool(materialMapperName, false); - } - - string materialMapper; - if (GraphicsSettingsUtils.IsUsingHDRPPipeline) - { - materialMapper = "HDRPMaterialMapper"; - } - else if (GraphicsSettingsUtils.IsUsingUniversalPipeline) - { - materialMapper = "UniversalRPMaterialMapper"; - } - else - { - materialMapper = "StandardMaterialMapper"; - } - SelectMapper(materialMapper); + EnableCompatibleMaterialMapperIfNeeded(); } public static void SelectMapper(string materialMapper) { - Debug.Log($"TriLib is configured to use the '{materialMapper}' Material Mapper. If you want to use different Material Mappers, you can change this setting on the Project Settings/TriLib area."); + Debug.Log($"TriLib is configured to use the '{materialMapper}' Material Mapper. If you want to use different Material Mappers, you can change this setting on the 'Edit->Project Settings->TriLib' menu."); TriLibSettings.SetBool(materialMapper, true); } } diff --git a/Assets/Editor/TriLibCore/Scripts/CheckMappers.cs.meta b/Assets/Editor/TriLibCore/Scripts/CheckMappers.cs.meta index 8871606e..0887e2b9 100644 --- a/Assets/Editor/TriLibCore/Scripts/CheckMappers.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/CheckMappers.cs.meta @@ -9,3 +9,10 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/CheckMappers.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/ImporterOption.cs.meta b/Assets/Editor/TriLibCore/Scripts/ImporterOption.cs.meta index be59ef6b..864ec00e 100644 --- a/Assets/Editor/TriLibCore/Scripts/ImporterOption.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/ImporterOption.cs.meta @@ -1,3 +1,10 @@ fileFormatVersion: 2 guid: c201497c49b244e8a7ae0152eb5ad027 -timeCreated: 1573070165 \ No newline at end of file +timeCreated: 1573070165 +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/ImporterOption.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/LipSyncMappingEditor.cs.meta b/Assets/Editor/TriLibCore/Scripts/LipSyncMappingEditor.cs.meta index fb600bf7..a30da4d1 100644 --- a/Assets/Editor/TriLibCore/Scripts/LipSyncMappingEditor.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/LipSyncMappingEditor.cs.meta @@ -9,3 +9,10 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/LipSyncMappingEditor.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/MapperContextActions.cs.meta b/Assets/Editor/TriLibCore/Scripts/MapperContextActions.cs.meta index ddb40be8..e3109fd4 100644 --- a/Assets/Editor/TriLibCore/Scripts/MapperContextActions.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/MapperContextActions.cs.meta @@ -9,3 +9,10 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/MapperContextActions.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/PreBuiltResources.cs.meta b/Assets/Editor/TriLibCore/Scripts/PreBuiltResources.cs.meta index 6b1faa50..3913b6ec 100644 --- a/Assets/Editor/TriLibCore/Scripts/PreBuiltResources.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/PreBuiltResources.cs.meta @@ -9,3 +9,10 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/PreBuiltResources.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/ShaderVariantCollectionUtils.cs b/Assets/Editor/TriLibCore/Scripts/ShaderVariantCollectionUtils.cs new file mode 100644 index 00000000..e0fc6477 --- /dev/null +++ b/Assets/Editor/TriLibCore/Scripts/ShaderVariantCollectionUtils.cs @@ -0,0 +1,52 @@ +using UnityEditor; +using UnityEngine; + +namespace TriLibCore.Editor +{ + /// + /// Represents a class with Shader Variant Collection utility methods. + /// + public static class ShaderVariantCollectionUtils + { + /// + /// Adds the given Shader Variant Collection to the Graphic Settings preloaded shaders. + /// + /// The Shader Variant Collection to add. + public static void AddShaderVariantCollectionToGraphicSettings(ShaderVariantCollection shaderVariantCollection) + { + var graphicSettingAssets = AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/GraphicsSettings.asset"); + if (graphicSettingAssets != null && graphicSettingAssets.Length > 0) + { + var graphicsSettings = new SerializedObject(graphicSettingAssets[0]); + var preloadedShaders = graphicsSettings.FindProperty("m_PreloadedShaders"); + preloadedShaders.InsertArrayElementAtIndex(preloadedShaders.arraySize); + preloadedShaders.GetArrayElementAtIndex(preloadedShaders.arraySize - 1).objectReferenceValue = shaderVariantCollection; + graphicsSettings.ApplyModifiedProperties(); + } + } + + /// + /// Returns whether the given Shader Variant Collection exists on the Graphic Settings preloaded shaders. + /// + /// The Shader Variant Collection to check for. + /// Whether the Shader Variant Collection exists on the Graphic Settings preloaded shaders. + public static bool IsShaderVariantCollectionPreloaded(ShaderVariantCollection shaderVariantCollection) + { + var graphicSettingAssets = AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/GraphicsSettings.asset"); + if (graphicSettingAssets != null && graphicSettingAssets.Length > 0) + { + var graphicsSettings = new SerializedObject(graphicSettingAssets[0]); + var preloadedShaders = graphicsSettings.FindProperty("m_PreloadedShaders"); + for (var i = 0; i < preloadedShaders.arraySize; i++) + { + if (preloadedShaders.GetArrayElementAtIndex(i).objectReferenceValue == shaderVariantCollection) + { + return true; + } + } + return false; + } + return true; + } + } +} \ No newline at end of file diff --git a/Assets/Editor/TriLibCore/Scripts/ShaderVariantCollectionUtils.cs.meta b/Assets/Editor/TriLibCore/Scripts/ShaderVariantCollectionUtils.cs.meta new file mode 100644 index 00000000..5697fb38 --- /dev/null +++ b/Assets/Editor/TriLibCore/Scripts/ShaderVariantCollectionUtils.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 9d608c222bc0e864cbc3769c06a760e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/ShaderVariantCollectionUtils.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/SimpleAnimationPlayerEditor.cs.meta b/Assets/Editor/TriLibCore/Scripts/SimpleAnimationPlayerEditor.cs.meta index 8b8e19eb..a391382d 100644 --- a/Assets/Editor/TriLibCore/Scripts/SimpleAnimationPlayerEditor.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/SimpleAnimationPlayerEditor.cs.meta @@ -1,3 +1,10 @@ fileFormatVersion: 2 guid: f2d92827e4bc43d68ac3a39cbdee0da3 -timeCreated: 1589229113 \ No newline at end of file +timeCreated: 1589229113 +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/SimpleAnimationPlayerEditor.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/TriLib3MFScriptedImporter.cs b/Assets/Editor/TriLibCore/Scripts/TriLib3MFScriptedImporter.cs index a350e890..b7adfbe1 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLib3MFScriptedImporter.cs +++ b/Assets/Editor/TriLibCore/Scripts/TriLib3MFScriptedImporter.cs @@ -2,7 +2,11 @@ using System; using UnityEditor; using Object = UnityEngine.Object; +#if UNITY_2020_2_OR_NEWER using UnityEditor.AssetImporters; +#else +using UnityEditor.Experimental.AssetImporters; +#endif namespace TriLibCore.Editor { #if !TRILIB_DISABLE_EDITOR_3MF_IMPORT diff --git a/Assets/Editor/TriLibCore/Scripts/TriLib3MFScriptedImporter.cs.meta b/Assets/Editor/TriLibCore/Scripts/TriLib3MFScriptedImporter.cs.meta index 0f4f70be..dec2aeaf 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLib3MFScriptedImporter.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/TriLib3MFScriptedImporter.cs.meta @@ -9,3 +9,10 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/TriLib3MFScriptedImporter.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibDefineSymbolsHelper.cs b/Assets/Editor/TriLibCore/Scripts/TriLibDefineSymbolsHelper.cs index 40d763f8..ddfe0d14 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibDefineSymbolsHelper.cs +++ b/Assets/Editor/TriLibCore/Scripts/TriLibDefineSymbolsHelper.cs @@ -7,9 +7,13 @@ namespace TriLibCore.Editor { public static bool IsSymbolDefined(string targetDefineSymbol) { - var targetGroup = NamedBuildTarget.FromBuildTargetGroup(EditorUserBuildSettings.selectedBuildTargetGroup); - //var defineSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); - var defineSymbols = PlayerSettings.GetScriptingDefineSymbols(targetGroup); +#if UNITY_2020_3_OR_NEWER + var buildTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup; + var namedBuildTarget = NamedBuildTarget.FromBuildTargetGroup(buildTargetGroup); + var defineSymbols = PlayerSettings.GetScriptingDefineSymbols(namedBuildTarget); +#else + var defineSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); +#endif var defineSymbolsArray = defineSymbols.Split(';'); for (var i = 0; i < defineSymbolsArray.Length; i++) { @@ -20,15 +24,18 @@ namespace TriLibCore.Editor return true; } } - return false; } public static void UpdateSymbol(string targetDefineSymbol, bool value) { - var targetGroup = NamedBuildTarget.FromBuildTargetGroup(EditorUserBuildSettings.selectedBuildTargetGroup); - var defineSymbols = PlayerSettings.GetScriptingDefineSymbols(targetGroup); - //var defineSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); +#if UNITY_2020_3_OR_NEWER + var buildTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup; + var namedBuildTarget = NamedBuildTarget.FromBuildTargetGroup(buildTargetGroup); + var defineSymbols = PlayerSettings.GetScriptingDefineSymbols(namedBuildTarget); +#else + var defineSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); +#endif var defineSymbolsArray = defineSymbols.Split(';'); var newDefineSymbols = string.Empty; var isDefined = false; @@ -42,10 +49,8 @@ namespace TriLibCore.Editor { continue; } - isDefined = true; } - newDefineSymbols += string.Format("{0};", trimmedDefineSymbol); } @@ -53,8 +58,11 @@ namespace TriLibCore.Editor { newDefineSymbols += string.Format("{0};", targetDefineSymbol); } - PlayerSettings.SetScriptingDefineSymbols(targetGroup, newDefineSymbols); - //PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, newDefineSymbols); +#if UNITY_2020_3_OR_NEWER + PlayerSettings.SetScriptingDefineSymbols(namedBuildTarget, newDefineSymbols); +#else + PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, newDefineSymbols); +#endif } } } \ No newline at end of file diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibDefineSymbolsHelper.cs.meta b/Assets/Editor/TriLibCore/Scripts/TriLibDefineSymbolsHelper.cs.meta index 90fe804e..016df8c0 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibDefineSymbolsHelper.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/TriLibDefineSymbolsHelper.cs.meta @@ -9,3 +9,10 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/TriLibDefineSymbolsHelper.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibDeprecationWarnings.cs.meta b/Assets/Editor/TriLibCore/Scripts/TriLibDeprecationWarnings.cs.meta index 916d8f9f..2153a687 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibDeprecationWarnings.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/TriLibDeprecationWarnings.cs.meta @@ -9,3 +9,10 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/TriLibDeprecationWarnings.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibGLTFScriptedImporter.cs b/Assets/Editor/TriLibCore/Scripts/TriLibGLTFScriptedImporter.cs index d043b915..162d5734 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibGLTFScriptedImporter.cs +++ b/Assets/Editor/TriLibCore/Scripts/TriLibGLTFScriptedImporter.cs @@ -2,7 +2,11 @@ using System; using UnityEditor; using Object = UnityEngine.Object; +#if UNITY_2020_2_OR_NEWER using UnityEditor.AssetImporters; +#else +using UnityEditor.Experimental.AssetImporters; +#endif namespace TriLibCore.Editor { #if !TRILIB_DISABLE_EDITOR_GLTF_IMPORT diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibGLTFScriptedImporter.cs.meta b/Assets/Editor/TriLibCore/Scripts/TriLibGLTFScriptedImporter.cs.meta index 8ee6d3d0..c2d6f33a 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibGLTFScriptedImporter.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/TriLibGLTFScriptedImporter.cs.meta @@ -9,3 +9,10 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/TriLibGLTFScriptedImporter.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibPLYScriptedImporter.cs b/Assets/Editor/TriLibCore/Scripts/TriLibPLYScriptedImporter.cs index 53a3e8d5..219c055a 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibPLYScriptedImporter.cs +++ b/Assets/Editor/TriLibCore/Scripts/TriLibPLYScriptedImporter.cs @@ -2,7 +2,11 @@ using System; using UnityEditor; using Object = UnityEngine.Object; +#if UNITY_2020_2_OR_NEWER using UnityEditor.AssetImporters; +#else +using UnityEditor.Experimental.AssetImporters; +#endif namespace TriLibCore.Editor { #if !TRILIB_DISABLE_EDITOR_PLY_IMPORT diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibPLYScriptedImporter.cs.meta b/Assets/Editor/TriLibCore/Scripts/TriLibPLYScriptedImporter.cs.meta index c24321da..de64bcc0 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibPLYScriptedImporter.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/TriLibPLYScriptedImporter.cs.meta @@ -9,3 +9,10 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/TriLibPLYScriptedImporter.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibSTLScriptedImporter.cs b/Assets/Editor/TriLibCore/Scripts/TriLibSTLScriptedImporter.cs index f6662462..1a5efa39 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibSTLScriptedImporter.cs +++ b/Assets/Editor/TriLibCore/Scripts/TriLibSTLScriptedImporter.cs @@ -2,7 +2,11 @@ using System; using UnityEditor; using Object = UnityEngine.Object; +#if UNITY_2020_2_OR_NEWER using UnityEditor.AssetImporters; +#else +using UnityEditor.Experimental.AssetImporters; +#endif namespace TriLibCore.Editor { #if !TRILIB_DISABLE_EDITOR_STL_IMPORT diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibSTLScriptedImporter.cs.meta b/Assets/Editor/TriLibCore/Scripts/TriLibSTLScriptedImporter.cs.meta index 38f93bea..897f46aa 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibSTLScriptedImporter.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/TriLibSTLScriptedImporter.cs.meta @@ -9,3 +9,10 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/TriLibSTLScriptedImporter.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibScriptedImporter.cs b/Assets/Editor/TriLibCore/Scripts/TriLibScriptedImporter.cs index a1332a10..2f9e9bf1 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibScriptedImporter.cs +++ b/Assets/Editor/TriLibCore/Scripts/TriLibScriptedImporter.cs @@ -1,4 +1,5 @@ #pragma warning disable CS0105 +#pragma warning disable CS0618 using UnityEngine; using TriLibCore.Interfaces; using UnityEditor; @@ -19,6 +20,8 @@ namespace TriLibCore.Editor } //Editor coroutines are not allowed assetLoaderOptions.UseCoroutines = false; + //Asset Unloader is not suitable for editor loading + assetLoaderOptions.AddAssetUnloader = false; return assetLoaderOptions; } set => userData = EditorJsonUtility.ToJson(value); diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibScriptedImporter.cs.meta b/Assets/Editor/TriLibCore/Scripts/TriLibScriptedImporter.cs.meta index 46b9f9f2..87aa952e 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibScriptedImporter.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/TriLibScriptedImporter.cs.meta @@ -9,3 +9,10 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/TriLibScriptedImporter.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibSettingsProvider.cs b/Assets/Editor/TriLibCore/Scripts/TriLibSettingsProvider.cs index 15e1f529..ac449f1d 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibSettingsProvider.cs +++ b/Assets/Editor/TriLibCore/Scripts/TriLibSettingsProvider.cs @@ -39,7 +39,7 @@ namespace TriLibCore.Editor GUILayout.Label("You can disable runtime file-formats importing here"); EditorGUILayout.Space(); ShowConditionalToggle("Disable runtime FBX importing", "TRILIB_DISABLE_FBX_IMPORT"); - ShowConditionalToggle("Disable runtime gLTF2 importing", "TRILIB_DISABLE_GLTF_IMPORT"); + ShowConditionalToggle("Disable runtime glTF2 importing", "TRILIB_DISABLE_GLTF_IMPORT"); ShowConditionalToggle("Disable runtime OBJ importing", "TRILIB_DISABLE_OBJ_IMPORT"); ShowConditionalToggle("Disable runtime STL importing", "TRILIB_DISABLE_STL_IMPORT"); ShowConditionalToggle("Disable runtime PLY importing", "TRILIB_DISABLE_PLY_IMPORT"); @@ -51,7 +51,7 @@ namespace TriLibCore.Editor EditorPrefs.SetInt("TriLibTimeout", EditorGUILayout.IntField("Loading timeout", EditorPrefs.GetInt("TriLibTimeout", 180))); GUILayout.Label("You can disable in editor file-formats importing to avoid conflicts with other editor importers"); EditorGUILayout.Space(); - ShowConditionalToggle("Disable in editor gLTF2 importing", "TRILIB_DISABLE_EDITOR_GLTF_IMPORT"); + ShowConditionalToggle("Disable in editor glTF2 importing", "TRILIB_DISABLE_EDITOR_GLTF_IMPORT"); ShowConditionalToggle("Disable in editor PLY importing", "TRILIB_DISABLE_EDITOR_PLY_IMPORT"); ShowConditionalToggle("Disable in editor 3MF importing", "TRILIB_DISABLE_EDITOR_3MF_IMPORT"); ShowConditionalToggle("Disable in editor STL importing", "TRILIB_DISABLE_EDITOR_STL_IMPORT"); @@ -75,10 +75,8 @@ namespace TriLibCore.Editor GUILayout.Label("Misc Options", EditorStyles.boldLabel); GUILayout.Label("Advanced and experimental options"); EditorGUILayout.Space(); - //todo: fbx sdk will be included in a future update - //ShowConditionalToggle("Use FBX SDK (Experimental)", "TRILIB_USE_FBXSDK"); ShowConditionalToggle("Enable UWP threaded loading (Experimental)", "TRILIB_ENABLE_UWP_THREADS"); - ShowConditionalToggle("Enable gLTF2 Draco decompression (Experimental)", "TRILIB_DRACO"); + ShowConditionalToggle("Enable glTF2 Draco decompression (Experimental)", "TRILIB_DRACO"); ShowConditionalToggle("Force synchronous loading", "TRILIB_FORCE_SYNC"); ShowConditionalToggle("Change thread names (Debug purposes only)", "TRILIB_USE_THREAD_NAMES"); ShowConditionalToggle("Disable asset loader options validations", "TRILIB_DISABLE_VALIDATIONS"); @@ -98,13 +96,16 @@ namespace TriLibCore.Editor { Application.OpenURL("https://ricardoreis.net/trilibwiki/index.php"); } + if (GUILayout.Button("Discord Server")) + { + Application.OpenURL("https://discord.gg/FV6tqCxY2U"); + } if (GUILayout.Button("Support")) { Application.OpenURL("https://ricardoreis.net/contact/"); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); - CheckMappers.Initialize(); base.OnGUI(searchContext); } diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibSettingsProvider.cs.meta b/Assets/Editor/TriLibCore/Scripts/TriLibSettingsProvider.cs.meta index 1c24752d..0839911a 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibSettingsProvider.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/TriLibSettingsProvider.cs.meta @@ -1,3 +1,10 @@ fileFormatVersion: 2 guid: a5b653e1047e419fb6dc0d9b9d4d2c46 -timeCreated: 1573055735 \ No newline at end of file +timeCreated: 1573055735 +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/TriLibSettingsProvider.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibSplashScreen.cs.meta b/Assets/Editor/TriLibCore/Scripts/TriLibSplashScreen.cs.meta index 0cc7c8b9..75ab9e53 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibSplashScreen.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/TriLibSplashScreen.cs.meta @@ -9,3 +9,10 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/TriLibSplashScreen.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibVersionInfo.cs.meta b/Assets/Editor/TriLibCore/Scripts/TriLibVersionInfo.cs.meta index 62c5512a..8aa737ab 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibVersionInfo.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/TriLibVersionInfo.cs.meta @@ -9,3 +9,10 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/TriLibVersionInfo.cs + uploadId: 752923 diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibVersionNotes.cs b/Assets/Editor/TriLibCore/Scripts/TriLibVersionNotes.cs index 4e09d4c3..fa8272fa 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibVersionNotes.cs +++ b/Assets/Editor/TriLibCore/Scripts/TriLibVersionNotes.cs @@ -1,6 +1,9 @@ -using System.IO; +using System; +using System.IO; +using System.Text.RegularExpressions; using UnityEditor; using UnityEngine; +using UnityEngine.Windows; namespace TriLibCore.Editor { @@ -8,8 +11,6 @@ namespace TriLibCore.Editor { private class Styles { - public const float WindowWidth = 0.75f; - public const float WindowHeight = 0.5f; public static readonly GUIStyle HeaderStyle = new GUIStyle("label") { fontSize = 19, fontStyle = FontStyle.Bold, margin = new RectOffset(10, 10, 5, 5) }; public static readonly GUIStyle SubHeaderStyle = new GUIStyle("label") { margin = new RectOffset(10, 10, 5, 5), fontStyle = FontStyle.Bold }; public static readonly GUIStyle TextStyle = new GUIStyle("label") { margin = new RectOffset(20, 20, 5, 5) }; @@ -19,8 +20,12 @@ namespace TriLibCore.Editor private string _text; private bool _loaded; - private Vector2 _changeLogScrollPosition; - private Vector2 _notesScrollPosition; + private Vector2 _scrollPosition; + + private static readonly string ChangelogPattern = @"(?<=Changelog:)(.*?)(?=(Version Notes:|$))"; + private static readonly string VersionNotesPattern = @"(?<=Version Notes:)(.*)"; + private static readonly string Pattern = @"(https?://[^\s]+)"; + private static readonly Regex URIRegex = new Regex(@"^https?://"); private static TriLibVersionNotes Instance { @@ -28,7 +33,6 @@ namespace TriLibCore.Editor { var window = GetWindow(); window.titleContent = new GUIContent("TriLib Version Notes"); - window.minSize = new Vector2(Styles.WindowWidth * Screen.width, Styles.WindowHeight * Screen.height); return window; } } @@ -72,61 +76,46 @@ namespace TriLibCore.Editor } _loaded = true; } - EditorGUILayout.BeginVertical(); - using (var stringReader = new StringReader(_text)) + _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition); + var changelogMatch = Regex.Match(_text, ChangelogPattern, RegexOptions.Singleline); + var changelogSection = changelogMatch.Success ? changelogMatch.Value.Trim() : "No changelog found"; + var versionNotesMatch = Regex.Match(_text, VersionNotesPattern, RegexOptions.Singleline); + var versionNotesSection = versionNotesMatch.Success ? versionNotesMatch.Value.Trim() : "No version notes found"; + GUILayout.Label("Version Notes", Styles.SubHeaderStyle); + var groups = Regex.Split(versionNotesSection, Pattern); + foreach (var group in groups) { - var changeLogOpen = false; - var version = stringReader.ReadLine(); - GUILayout.Label($"TriLib {version}", Styles.HeaderStyle); - for (; ; ) + if (!string.IsNullOrEmpty(group)) { - var line = stringReader.ReadLine(); - if (line == null) + if (URIRegex.IsMatch(group)) { - break; - } - if (line.ToLowerInvariant() == "changelog:") - { - EditorGUILayout.Space(); - GUILayout.Label("Changelog", Styles.SubHeaderStyle); - _changeLogScrollPosition = GUILayout.BeginScrollView(_changeLogScrollPosition, GUILayout.Height(260f)); - changeLogOpen = true; - } - else if (line.ToLowerInvariant() == "version notes:") - { - if (changeLogOpen) + GUILayout.BeginHorizontal(); + GUILayout.Space(20); + if (EditorGUILayout.LinkButton(group)) { - GUILayout.EndScrollView(); - changeLogOpen = false; + Application.OpenURL(group); } - EditorGUILayout.Space(); - GUILayout.Label("Version Notes", Styles.SubHeaderStyle); - var versionInfo = stringReader.ReadToEnd(); - _notesScrollPosition = EditorGUILayout.BeginScrollView(_notesScrollPosition); - EditorGUILayout.TextArea(versionInfo, Styles.TextAreaStyle); - EditorGUILayout.EndScrollView(); - break; + GUILayout.EndHorizontal(); } else { - GUILayout.Label(line, Styles.TextStyle); + EditorGUILayout.TextArea(group, Styles.TextAreaStyle); } } - if (changeLogOpen) - { - GUILayout.EndScrollView(); - } - EditorGUILayout.EndVertical(); - EditorGUILayout.Space(); - GUILayout.Label("You can show this window on the Project Settings/TriLib area", Styles.SubHeaderStyle); - EditorGUILayout.BeginHorizontal(); - GUILayout.FlexibleSpace(); - if (GUILayout.Button("Close", Styles.ButtonStyle)) - { - Close(); - } - EditorGUILayout.EndHorizontal(); } + EditorGUILayout.Space(); + GUILayout.Label("Changelog", Styles.SubHeaderStyle); + EditorGUILayout.TextArea(changelogSection, Styles.TextAreaStyle); + EditorGUILayout.EndScrollView(); + EditorGUILayout.Space(); + GUILayout.Label("You can show this window on the Project Settings/TriLib area", Styles.SubHeaderStyle); + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Close", Styles.ButtonStyle)) + { + Close(); + } + EditorGUILayout.EndHorizontal(); } } } diff --git a/Assets/Editor/TriLibCore/Scripts/TriLibVersionNotes.cs.meta b/Assets/Editor/TriLibCore/Scripts/TriLibVersionNotes.cs.meta index 52e33691..7d99e2e0 100644 --- a/Assets/Editor/TriLibCore/Scripts/TriLibVersionNotes.cs.meta +++ b/Assets/Editor/TriLibCore/Scripts/TriLibVersionNotes.cs.meta @@ -9,3 +9,10 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Editor/TriLibCore/Scripts/TriLibVersionNotes.cs + uploadId: 752923 diff --git a/Assets/Plugins/TriLib/Debug/ICSharpCode.SharpZipLib.dll b/Assets/Plugins/TriLib/Debug/ICSharpCode.SharpZipLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..0b4e761dd3d4446382beb7180cdab25b62b386a7 GIT binary patch literal 200704 zcmb@v3xHfjl|Fvw-rKjkZ}&{*PS14DOp@tI$V@K%nipUK0^uPbpn!tR0Fsb^l2LM@ z8&K19h;L;fnpNBtBWm!;uI#Go`-S*^utF5q=d5p5UDs82b=ODuf8ROxcHemfaDV@S zbXA=?RdwprsZ&*_9``AiyxOn~!?5x1kw*;ULvZ=GMSdUsXD_0AiXZ7Q{waO`x({`o zd;hu%uin`hy|x}ayMDzrqdTtHwJW%Obo*7K^&57L?%Xwc`guTYxIiWRJsWu{qnaL@qqKs zGPb>xsQka3DTbtA(8G62NN-UT<3d2tDJb zW&6dpZ$iBGpN-4OHk$A@{gY1JPh z>N?P(Ip1hnt4x1A!mBKGY;pVnX8j-L+S|akuCcszaI8@OHPRj&8?+CO4b{Ca`iFZE zSY0nmU`^tne^fhX@FUqKbP35uZZcs!5uCvPo>|S*r;tGd9md^l?yL6JPe4#%V}uRe zb`FVnAZHo2KMshS&z4Vg@=pGCGqvCUy=^#mIt8b2I{=4f)jOJaNh)@OH!% z2d_M&sHwtiHf8SHIsNfs_BQm4u1u0yjY2mVTMr#b77!S@vK<^mu-MxP4>3I02@fOl zHu7o&Vrkc~;8@zVN=O@h1hlmS#WX^(#6=h3cLZ!tH`Gj9#; zFAi?E2KN_xw{Now`$zDb-@olnjV@SgC3=lUua@ZHcJ!cC%t(CERfJ+%Fh+m@(uB78 zkhZYA(7D~xh6{@co!g^WH2IR4cH=92Fm%EcaakzU!(8%F9+77-e<#^{G}();j*jf0 zXQSsk!bitI4>6!wyoAV*i{74a^6Wg$I8jg^+kl3rI`eF|yuotzXL{_O#8_drH-UiZ zuLkZFhYpxYY7Vs0tn1i`+39a2N^YU^KZt-nah4I0n>-Q?C_P3)twY25Sg{>ilFKOg z=E@YfBc)TV5eUiaDI_Sx-7UOG7YfpX9(IgrnU(Z3XD zWTcI;$819D*;U63DoCTDpbGEx$aZz|u&H-6``#o^Rkw`Q1(koKh|5BIX5kq_EwJQvk-J-6siA2R!;Da%PGaq*xYAbC zG-0*dEcU7tF(0RDS!J-A{tNbz`E~TU(bXj@H)H@3f3-F^f1B(e=;3?;i)B zO1HglXJYWunqU8Sz~Rf;eYPU5x7&&QC$#a+L<{PbQb0#*J4isWw>1RUvPb_7y0-y7 zyRN?(znSDH=Cm<4Cp%dsflc|uC0lJdgf)cY$XHYO(=*qU~p9pxG zUB_)fS=(d?RJD!vNgD43A0Ry#ZwadQm`$R9g#mh_n|I5*%_eCr_RgG<&y?+CVHTZ? zBqd*U9_KS>7G@7+Q%_4(equJIY>CV(iDr}a%?DeM*SMLNTKCvaPh!?`>{&>tutQ7e zP8VhcA-x~NiHswO=@%(om0qQbBac#+fTn7)dL^J>JhQ7Fm`2)zQ&>@gG@^7#B0rU> zpNb}GU|Q|&&Pz)$Jz3gzb+nq+T8I{l9|7 zas{$qr(&f68Lx`a)=+F{U*y1{$)80{%qCjbu0RFb=*d<1(Wn?uY;-z|4>pu0dbte^ z);yLjv?IC>^rhKEcd&Cwvk5V`b1Ab4;k9#VvkCFFbI1(hYv+&~Ymh^B5K24Oo!+<8 zgDUIsdh%0cuO~5Kdp+f@L~d2ub1mCjB^?$nwZ69sYTt7a$hnDX*7V#KGq;^N^l-?s zUEDH(dR#2^fK=Q0Nz|PYL)$&OFgI83)1dx(_A}>(w&!{`-Gg~$qI$0B*)3Mi^b##r z&h(rXD`$Gi7At3ZsTM0|dg&G`7nN^%nHDQ&dfhEniu8CHFERCW4+ZB2yzauBH!vGH z1J9hxb%UJQob7>)P)K$yQ}FC!aqITNTp6Y2673)u>UI0iK#g+Un+lIS@`%?xv?J$v zSR&?_=<8FB z^;`H=wLKN3?)Lh|a;ZbPv}JQ*hpHb)6wnHrc0)qL3}&t{o0t#Sl{vFXam^>u$?4g* zQ(8|-$z_BYdEr7{nE@wHW)#yoyHn$YmsnKmbr^WOzFZEHf^n(O%S=Cozf(umyAmC; z%k*cY3aV&@dI(WrZVbuN2fS3SubhhjDX(w;fuz^>TChafF!5u;mQ}PPpKa0XSJCVb zMYCT-vtLECpJQjnb0+$da8h@s@QboDXzh%b%cT<4)0d0c|3SREz21|b{O3m==}3p! z6p26aH-92@sU-hpML;J}4N#C}K83~<-C_;xKu2Z=Mt`S+hGzG2=5$<*LM;L@v*S2_ z4$|@udWq^v(?#8odFk-ywDu-l@((tTg%zSO*ZU`Vocn`EvfenfJ z1a&L~Yv+ACB{QsjF(Wz!!qE_caPs?$#TjVD{iAOLQ8ie$5C`b3=Rw;7EUu3kldB0Z zV(uT^3)HRo!)A+OP6+x_iyc?HZ?Sjk^wpsyq5do62Wx_P6XQi5VN<9V9YTkSz1co9 z1P<351d2@|Bn}yG+sZNNg@_5uFN9@4JE%4)rd3NJg4#;ehAJ#o%BrjeR9EFyRcQ~c zCZ#Wy6Qf<=o+_6>vVIn&}8upG)E0WCyl-%e4+GRAb5F$P3y+i_kre6yE{tsWQ`~$qljAlNiqK$WBy;Z z{rk)&)-HB+7(zmi>0bbyR>2@dDGAPIo*2Tv380v(zD181p}yVreTP1@KWz{gMvWdB zGfzQ!*U2O;AM)*9-w*lDnl}-eO8Ve!*>#dL|N3a@p7NOKY*|yTij`N98GkTOl5RBj zK%(6iMAZ(xU>>RnBHhxL9xaxu%_pV6NX!{vlCoN;gZ&pKIhRS+oBjUvG5$bwXsQ*P z*V8)%+^`z#!4yC3G_C`7rtF%q|;!ArCnwdO=tt- z*TgtKWF;n&c4>a4xF#lT_K}i3X57kIqE{R-ONm=K8G4pox@RRKt>R_Hi2%LCh4VBx zEy4ZainuMzFuD8}5lpnuuVo1#VpwRQcO8in5_JRyK1wnccLd&&gd;?etRqB`(vtM; zuFiaXg=THCgH$kQr5hXz87P@e_5i}@2Cz6drBMS)rgV#?q=KWVO3mFTa&N{4|hvg%Zt8yWoS!I%y zqm#iWkU01aeu`7IAI5{zwXc~@()M4?lDSP>cXM4^+}d>RJBlkwgA4%z~9YcD}IGD#gm%7B9Crm=%0hem^b0pU1DC z28*DG{nsF{khUuc-v#8m=t#<^^+xGjns#8>M428IS9$QM-?f7Kks@OSAA)mzL59pG zyL)94%SCq6;4_GUpZzlUg8EOV|33Azmj|DN-%P0>YD;cL8yYE*pW|N!Z&I41y2rl? z)pL{nv&cf2qO|oPAMjh% z1;eu;B(}0X<%od#&jD8ORZ!?;`k?@*JpJbaR;{L_&nRfMh<{}$4wK$fn3ev6l+@mp zYPynBZ+*Zuu1(9jtc*!FV+Eu+2)sL8Nv6`ly=0FlrBrYc+C}+Nso9%v5iT7A}c?)lu4ma8Cae-R~Muor5Ir4W$?B7p!dZUM3XYT-M7{d|}<724qxL z*jD}*&jn*#WsIZMhl<#R3`1@C4A2E}F}k2HP2-iuiJ#McWg0IuE;tnVKhSmTFS@co zGmbY4!R@S<5B=v-=a~lNLjF{Gt0!QJM=`dj8c0wDY@#a-7kVLVp(f-UP&6Vzn8#@T zq=|NQ%qKMOycD~TH2rSiQN%+ThwU=WC6UVbBwWZdY=+kYt-8_luY)_jFyhvS&~9e^ zV*ENm9Y9%}It|V*cS|3or8?~yBTzA2>@Uc{7?ix&0%!n4I6(vconm0kBxR+ObyE4H zEOEM_Kgwn3i~X=lCq||RAh+F9FjE&tr_)|SCgd}TLe5!$a#X8BdisI*ooaw(4Kp+${Z3M-D z$yRC$-X#o3vg{?c^ECxg|dCQCie2J46H?lr3A}m<+3+)7$E^zM{c1||Q z;<{)PaI=Zcmnm;hB(uqKFseewxbxXmetxRQN$s3iY1E00-JL5msD1$e(NmYJ?3`@s_yb6BIP!#oVi=uuOkNWwds9(gR z{;(+OkMXEKEsFXxLnq;w#(nUZw*Q$ZEK_3J{{q7iE&stlo6KJ^gqpBT+9?0N2<4Xy zk&l*fD)`7h#pfcI>11*Pu_G5MP?f@s-yl`-*cwIxGFs-O!@+KFwqh1!bD#a@WLU)3 zgnF(cOH^^Uw>b|x0t^zU%AX0{e@*1!NZIx9vl3YZooE`GAe5{5CawFf)?^DPSo<2f~6!mWhOaW z`T2m%D^FUZ_r9>5_oU`+$CtvfMFLY;iz59!C??a_<=+f9V2fG#;1P9TuSMfTx^1oK zAhL^AhIZRjlX)IcG0{c>+lzc$Si%LE!J)EM$&{12!~Y2KJSfM+5IOye&;<8&KyeC3 zniV?0VTqzGzQKs&EHhuc()I@c9*3BSoV*P#`kc(+I_=6H^`>^aS}~cxo~3ZibYO`l zt6+(4w}zPy*kjGfYiieAd_RT4fLUeo_qlqLPgHa-Tv6u}pqKY2I2 zJQ|hUgGDDsGOR`I{WH5ve}SYmC2s+mO=cco{pubJ{V#`~2O5}$hx%Idq=sf@&8E;N zsS9^#E`xUjuOJ<9qVtlX?3>N)NQs=TfRjbbx9CaXWRyULXP}TtkDk#w`CRNXV!X?U z9vBr_lZr|%m`53#``?3wg?j^6p!SMN;Isbih*noFx$&5oD`^^2K1JMQ73T`|3=2MlHvj2&IlkLC=9U2l|G#? z{;|t2){!pALPytO?O-|7i#^bb(s@NT0GegYh@S;~XNzLtjKo1Aic3Hg$q-b``Wd7Y zIdqCyNeLKp^GEpeE8>O`Q7LT1Fg-Tw-TnS=Dfvt2^VuCD`qsneumHr~XTYf@-u-pmA_$^--0D0~N{N3_t z0g&lVz~3$J6#%*J1j2iekPOm_nQD%ReFaUKJ~{6M{8bS23Hj^<{GI7FeRA0e_9?8$U_Q+hOyviBbZd%FN{kyigJkgi5r+%gk6Dd9D{)rn7*cZ>jB}6Y=CIkCK?#jaLEGu zQAI0T&f$_p<=)Sx#Q9mk#_pw@R4EM5|tB7%al>in(MK3hCkg;*zSG|;yF@~V=BfN1 zd-~U)d$v>~$^Cwg!n|c%eH2En$REn&9O(1WhKm`3Lvc8+s2rVhv3Qx9 zG&5yX)tN0$CfCkyJv57}H$yuz4iKIEbYC(*KluZgas>g+KOp(MD>oEx-YLGp4Tw z5b58ybAHlJ?kr{Byd0+hk>Gy_~5{`H(WU9Yk%Y!PGGP9HXk5u<9i*Gn=BCQAwgo6Dfdb4V1t zy(aqmiO)ty#v+{jbmnJU;+9UbXx$ZR-$z;DdgR@}pil@Ds$V3i6M&J1j1L)J(sq6V zYF$J7jT)ojj;(8D%IlLb@hJB#__ApJl7^pKzWX#?s_UB~qYvhGdXO#zmmUe<#6{eX;#|efvIVbjg7PsigA;Kq=UFIocM6y|BtlX;iw_;? zc`9Rmj^|LowRbP)#-{ZYd!^{vGldlpu)K*7p1+0av_mpa(F@JV#&+%w)8Ha! zN;disq$#2smvk1>jqQ8~`|jUETF9mgIw8=Y^CMm=_&$L37o&=O>EO+f>k7918*hOp zyPU@Iwy*}znCV|3_S7(TvbITmmB|n?RT~d|)3r6B@7NlQ@JofpY*NIlz8SW7;{za1 zJg8YXapY$C*K%YtGD|I7@?yoC#K$pC^ve;Y|1ajF(ML&gsG zDX|gkRQg#y#`Y(}<)02#oS}4fy`fen2J)s%WIkrPdNaasS99P2ll9q>RNa=m@OQWGwy;)zStOzT0e)Y1KYU5AXd5 ztthL6GEB0JiNhgBJcW1VNm$-S+O>GD>_{Y&vfWXC7#VjqF_NQiMWM1SlGKx5VvUFY z(=6u~_<{fP^wW+5|7Yp{BmH$+T*VNd#Ck$ELooDHf|N4ZOi+F(IDl?-FpIoEgQx(J zabM(lpgUF%Obi&27dh3u#PBhm638qj5+cWfC7EJBXmtWXNz5MQQI7C590NsvyhmbYZYMa?wi zu+7`Di6k!yE3Y^G6>h^Y& zVI>;R7TSC4;A(hKhY8fdbo6 zUugW zluABzLlOL~W>Pm``q|Zg*ecrv*aP#2t;60p(ru9yeSjh`C%~1c<|mO1R)EIcU|aBK z@}c=!6WS&VFUO{<$f5kClQ{lHEIDwP8uG%kxm`GG*mI_l$b&}C7w*L9e;jFT{0~yL zm@VwN%;~8J=O=M2T0$2{5wQrY10@MohXTC_2$&rbv#mivs(qHg=dvED?@lEh;9(7aQ*HBuGiAu>`z)w1}>>V5CRCkHWU% z{>IVyh&DM%8B5Bg!IH!{3CvnWCn?uVKad{YTGH>%LPIS)cb7D7DrCT_|QAw*~C9R2ZeMI8WR_ev~%Cb&TS188lMw|RYAo|cUX{3YbAwi zHeU`NS;2!q<`kHr;1C0c%_e4qa$$TI^4CxS^x%4b^t4Wsg~19LQ&6-?p20GCzPbud z^3M#a04;3LOonR1=1_~7n|=*&+C^T$a?gf3S#g0OyHMExL4*Fd;f0clHyGb(dq`Q)JkV}&H%8agmGh}Svj4kh{W z(t)vI2S2MFiCg1n+*(KCpyyc)z4y_ctL+ATn>+Mfht?yZK8zwRFNxA<8k#m6Sgf{T zZSyH!=#Z{3_5jQ^`fya6iX9+^RL~_Aa6@M54uVke3>1k;Jh%-Tql@+7XAs~afXHQ} z*rUX=59nWvqkoP8yM;A@jRoBoh>XO9(j}@S77yFRq)pj4Ug}J2SSC{I0l_*L^B-pO z9J9%Y=UfW#7f!td&$%EYM$nZ4c=|1%*x9Wwg>Z4}?Mi$ZV8nifPN8*wh(steA(*bf zX=)SCQ^Nx#R^z?MyY)39MaLs!Fw@rfuQMKxCLOJ86LhQ$V?hugNT?jgS;QD8NWEdE zh~FE9PFsz8qlDt#sJYU;(WU90f-!LpI7JXzv3@X4l(dIpY1c(*%_hM}`PVCCz`Bkj{YjGktCGI5+G?=HGT3Se zUc^Mn;JT<(6dI*DS<*bPJk2dDr`d>dwn!S~sZ@HSF`H~qoRbUQ3B0P~r1}q*%|b@@I$+0{Ucly`|0Yt^6wYm} zobJdajN{UteFsMqoIAzMvNyI-s^-GFg+7?~Xg&51FkAER@B$vr3h!ee*H15ac=o`8 z{rC;-crC!*TDijFA#OL9!Yc-8KIC&OZtA#q@Hq|28DCYRi}9Z{S3EpPQIKkC4wath zRUZ#lPbn&kqO!4~O1z7M*Px8SXBmAmRYd6JFE>2(A2iPYjr#F&-)EueeH)7$_HXsz zY=!M72oj$|-`(vl@eMM*@m|!R^)DUoH|h1?1A-}g92ffGo{IJ;;DWH%cpvaH3yJZ( z?EG;4%2i0F+epk{D$BX{%Kw>%6QPX~>~ z%iMw-fg8&gPk3X7N2O_deJ-5i?*-04w-~B(_NKQZq+4i0|8yUAJk%KaejsmRrOmWd z$C)`Zj@Vo88pN{c9Q^1`H+J3ykB`)p^AiwHNB6k#@QB7}uzcKN%<00SB4O+fK8T{r ztCplo>vr-%IEfYc|U?%YLU!v`M*O4Tm7JedtM%nac#5>75HosO~ z70HucrlC+OtB1RgV-{!~F-4$&e}dl;(+bVU^0Te+h<#pkrh@pN%W`VmcrI2m9z z$(BVx+53fBJNaTXA}mYcFxGe%s@cM}3k_i$yUU>XOleE2vOy2!&Q5WagKTId#e-zGNoc80I z_LEF2^qvEH`S*XP0ncIil5J1I@8mm+JkMf#TmJh{7%mx{W681ZjOl*}fMoC-)NJw? z)Bi|2G(B$mACu6h5Xa;DE-rTZpXh)v^>eZ0*BQ^Z!4+Ig$j@Utv`NNUSX#;X(;I-s z_n4_SmM7{DacG2b_vWI1mRv`>#dlj`F7Fk?XjI?{#s7+Qod*3hDu@OJK|EJr(niERiWu)UhP+d*K_A`++|*=`>3@cv!#4Uwn=cC_ zD&h-ETE-W_0Qrn;V-mQGFM`3j2e@XOO`6T768#h)C(M5LWt=$)APUJ5T0VU7Ke9=?!%KEXN5#VFV< zpCv|h7dwEe0j8c16?6PdWw2YJgHwa%U?=a;J27JpbvyYqE%ev~kp64QnJ@GS&xgW7 zPsJ3a{zf#V|9J#uFT9N7l@gefWV}t{R{w>oKPwM&vHwN3B6WdnK*IH{v1eQVNbd=Vw@#vzyRp+^`>7gX2oLb;er z%ek}8115i2xtUnGI776iT{gGo`Z`u)2Tv}dFVcBnCAJ{-DS@u7)LyJ!- zVLxMZFH*tM`FWt|@u@MU!T@-bY3G3;wbo5Ryql$)f*1tRN$|v;Q~fp$mVq~X-LA(O znD_7Rw81*eU9lDrUi`n(lRzzg)viUsl|^VKKcCIdclTfic{w4;t)@Rgt&t^HT%Zpq`)2;Yncm1Qwpd8K6Gg<>N7^F#a}Eyw4oYY{%{f%%-||NTxq zxZ;umxZ-LjfC~O8aAf^2o?YfqNRPkN79VSHw?$~!Fn3~U_ArBu%T3HV{+r&x*6-;I zwEm}q_mRhkhvD(RkcczU-_qqOUpxT(Zv+qz04!H9!~;VYOAl<&0W+EetRTS54*;y4BoWV3F>-DNbF{y@@ z;@A#)sDB7IsE`J0SIt4%Dwr1QoM!nGX88^z>#@h0Uu7wWo&N!>@k0FQJ6z)!m|GI% ze}|dndWiIUBHa(h2Cs+DY*IWbm#Zs1tg@b29%7afDL~B;+%;RV7EmlPvV4{NE8(+HD+pUj*DlbyW|?rd31HxP`9tZ=^rb z`V}2K{Q94C?VfbQVJG~ZKohzO_@x9K4g7}$k}b-#Y4xPgu8prF2_)bb08s+isBA}u zH5B|aFcc8{2;OYDo(cv*{PkN<)9!RI3t;6Kv&r1k!N~~8`#-XhsGMOoNrJ)^G-Iay zKcSxGQaZSpY1hZoDh^)$7a_pfR&dQGt6a&Xf&r9#d=u-EC5@x&zH5woR(DC0P*2W- z-_HOK?VySBs#k=W;>ki0qd|4;0Ou#MDM_5*A^eQnqHHTu8e=xuS$v45TS334D$$6* z1odIBae{jw-4GJmHr|bLFJ_<9a*Cm3{(x2Jiv@61le#@DuBEwlWFubGBf!I>NB;l9 z)n1mA5=~9y_CtqpL0_jHA8nh@ZfXCD$ zv7Ru_+hf#VzUkr`0OOi5%X<0WLmt}qC#>M9U;`gcp$@=@0cr_nsMcMwM)v|ez&R@i ze(Ya{egJtV?zM3FN7?So2hHZs2VoE}5Ix3pbc?-xK7?<}(8 z(SS$S4stl)=Hd{F>ukONslx&a?E=^}g0DrTs7P<#2uxds2`s^nRC)GBEBGnWM~!;2 z<}UTEOs8;U=h2uTz0wL!K?X7pEq6yLbobp&RWM`dgM@!~Wvbh}S#aZTR#A~uvLNk5 z=KKKCoBq#G!OBJ}m;$I$w1OJk0o=b9Pj`CsE;RbqZaeKm)w&C~@er1nkHi$+^#~%W zZw|fMc*ajvK25A<-tK9CH;gNdKW*zOQ&!mrj{#pVLHk+3903#LSlo+sg|HZ-nMl~eS=}_u zF|*2ah&&MHo=gW1M%m&ie8mEAWu`in-jE|H+Q$Egl;PV(w;AVr(>RO##G7}QqhNdp zK>Iwj^Vbj#zK)-~dS$c}l3rizB|Q-{(4=K@EipoU3!NiW zk8;;zvfl*nr1W7vvVkTD?JQj1Zve)nOanG{t^k>G>9SMP;G3-T=TN_1ymxBiAlhe1 zJa%=-ocz?f&~zdXHq`#LjCa@cK` zCLVqW%X<_&T&nqox#tnEO#}`0h3U;^<1NStul*!(#tG&h+**;+r|kilxD^|x2!rn+ z3JE5@nH1}LR59V-l*1$15G~3a8xnIflXfJri@>fhB!xP!v2e2dAjT z^!F^SXv*62JwyW08jcVloRaJI;zr#xc%V1hQiCVeG%Z(^w6?XoEh

`MsP?Evb*`n)=nSFFRH+l78P(!$OoR%P?8=hKyS zHM?3zMzmwdX%3v?IvMrRNUR=V(y8>?@`Z{kSkD`Tf3mvwPXYy~G7c1AO8Q{y8oKs_ zE$kD@+*C^SKMI=tG1AKY{Q<}*{~n9B*!fwj`5a`};*V)HS(uh+HL*cyxA+4%CUSO* zKk(P-=MNsPpzdtJ&OtZ{QeIfi8|mi{;3Qb7wwkPj*2HR(d&)wq`8@jh1AMYkd1*CY zKtF!~$Ew79CY#eW;f2Bz-Mi>L?PnyQalmPGDdcUrMwrs z=oA`CtAZ>=8QK2eHihe6#Pd;hlKNBxgm1P`P{QnrSi$+{qRjkM0#B2d&o}+!S&2lk z>XuIfdnjx(iDEx?eT$g7g~1wipf775iNpGNy(R-<)*SJt8Nx@Y#NK1-H}cqD{9_SO zoS8f=^tm-$))rW%=7+xi8WfAbsx@2z5nqj0#x?B>9z^7f2zy|7I#C3bdXNGudJu!5 zahcSYAeiUQHKki&cFKxZalA!nb&<~n$Y-9P4q^8j*mX=IIk4*q!y%_I!D519RW}0U zSS0GR-SjsjSrs?WC^7@PBwCtU##zj8cs3UNW=oH3tzs{wgwLHIjhwx@6{-i7X@_q^ z7&6li??V`S5$*7+5Qbp1!_bR(P&5YEPe8&M{TN#Ln0|3^7rKzm^IQNQcP%=jC!jkW zR}jZ7W;4ZNwpi#co{+QgFHAaDym@PJXnV3auzedo-m-mLx|qQS9PHKjNffT!whIfa z9M%=DMEx#D{j6);;t7Keo`AoE@3**_;t9^`D~l&@l@RiGikT}BE5YtUF>4hEc3e|j zr2xLn!go=NLsz0)AsQbxD)8A^|NDrtaDJ#*oZqVNPWnF}wj5!=9i((BnQvg7LAJro*WbZmpvH>vhkFJYvHo=6^3SUD>8iU1mq}}V7S8j_b`P(GHc+>ByX7 z@1>;@beDe~0<-uiopgVG=t~i+Rxu0I^AU@BS_Wj<*ed;({A%0*I6m1B+y%F?JybYO z@MZ*uu`@ac8nh;n5}Cn0$KW1B>zFROXJA(cO3AURXGYp%=EMk{+5~SG#ME=KIt|l{ z>Lw__D635Ui=9$&N9*Y*j8Av{2wX)&i>fFm0r)WhI=vC;DDHsn#Jkx*m%eQBjH0oP zeHrJw`PqQV1}C@$(YL-3O^Z#kI}Bz z!$cx{+F=%FWGZ3_qg-e0#G3ll8k|Zsq`B%_;nz#BA_Z3PkF0|_Su1!CLfsmIs!O(R z0&C2)G&?^pBBEYzAP;3dM4oe?(m{(aM{@xXO#<1=>Te<9^?BG zQt^cQ22~fh+pc??6Ez&lB1Ri>8JYrLN8=Dz?kZph1S3C(!fGZQ_^_P8;DmwgOhBdc zg5A)a37*9fd!9b-bNv=@8O=&LtJGi>qbJ@G!|9cyv#cmy@A$Hxi#j{W9I2&EoV+h) zWyZm}aSY_2S#@MV2Kl~_&4`)QlGoC)u&93#{E_9AEUH#sPj$AUYdUDWN`RxPoLI$%=l!gY=vSHf16|O7PC{iM5Dx$^jsW5TK*(hY;z8N{ z1s~t1ljlKjWna9ivyOp!+9C2o>U1Naf)B=Z*c? z@>YcYtsS}mAsE%dxYH2&c{_A0LZ51fHX;NQU5GgZs>w0U6Yu1&jXE08oobl|WPgQy`II-T_GB}?yft0d9Ecn;KD|*N>3gG3HZC>JeWvuI$ zGZ1%DrR033Ka1zjtp?26IJUL2zrG3J81*sf^ik~zMaT7utfrMMdJ$eco_MEcOZDE zg}r!W%wK#F;kaaQBVw~=?8%Hm16wXG-p)wn8^3~&4@5)T^QYGa{xABFC zBAz(LxBgZA-!@0Df%?Kqqr2E&tQL=vNB?~2Iv1CfM}LR7LNPZ~>{+W3_aOqSD99eU zf_1}UBQSDh(`yxXRtWr?UT1sU>aDKJGBVYFI;i4|B({_`SF$wKga_J-o1y5>zJn~wsz!A*=X zZz9Qy03^2qP>Ia0Ol3zN=bjbO=os_YMl^QuodmJN6kNOv#A3&npPzQKMxr0x9ZgQ^ zxc++eGC{P2;S@d6cO)E%0}d;7BpiwR2rhninyejQ`RxER3&rQSaFfD6z#(*ZWDD&! z^&_IK{VWeUTimzfIuFpIMc+r;;}IST1zzXd&d5k06&(Cz%s#xm9M5n(1mo=_+Udu^ zOAH41whAV2GV32w1haV?No~FgztPAbc|+@|}~Y1H)XR{WezPPL8+{&V+Na=6fybG77q2 zT+{R|LCm*U2G*ZiA;Mg%fS2k5KTFIS$QDe<^9< zRhAGfD(SGPyC2z<*g2V43wNaO6i$*t2VOMN9=9#wmlZspTzeaS!a39jQHOcd0cJoL z=_hTxREMvZF`ej6d@2WP3pvgjEsk1#=>+jp?%nrjO7PcwgTk>VCJB!D9 zR*)gfe>X@N55Ehdl}hD<-y_4QhTUdLB+=}%EdTw$hQ|?)T}j#aY7CLFT#|va^=dFc z+GGvtgIN#kXavbfhr)sJ>EgV~Bky9ET<8$PNwi zkkZxu-6W5;C-u_w3k%Lp|L+t&xr!sFi{$Y!DsB2U2gQC4 zD=NX5^XQWTA%nqmm}VIR^H!8H9e&$V8OZPMjri{)DgHm;cOImLzT)WiZDAjS?NRMC z!-^_-s?_b*d^LdYwvKE^FJO@h!IxWM_ge%S0%&kM-cwbKVU=!*oalfjL}d*=p0c7` z2HUxCt@@-ej{z`F`cX1CVd77+vxvna%AX46M{Q`tm#3f{%x@sO@fr;-%_3Hlc(t@;qPn%Y z^)kh=&bIOXo^ZiByD*EbfkOu@>+HeV3n9WH^1Qn$edcU-EUXLeVQ;ire+@oz?Hvo^ zAl+*Sg&LJuxDw`!Up$>v#hoD@)@Fhqh2Ip0-x9hwjv(=Grh5qlhY@HXI#8toX7-W~ zw^o<|>}rhQ`zMl~2;!lfS$q%7c&_mC9l)xLV*~p=@H9SzUI4Kn5LUDTj<3M^2!Jg{ zvsU6VH}TwU$^Jh^xPAd(TNocSz|6xR!um=;K>d5BEooYuenq45T{75;U1s$74H_t-Bf5J~h{RH-m-NJ(8k=@)z83v*3@zcX$}(>3y^F zjMT-3%ee?PRP+8J)Jtfwj2Aq9TBs8{A3CstgOCM0&v8@{x?kX90MIZdG+BID)>U$O z{o%+YhBQ9QNbQQz`1KBr*tdAR{34B=BUFoN6!;<WS$JJ`Si zSLQ8h_zpZOgq+0Y7J3YYQr0=*so^O)0P^#P<+OpY5J-PVB)F7oZ1*?G;e9*VY1B85 z%Ut5M?g%bHHN@13Yt7Af0TH_&uVH1+7s(T}#wPS#Ju`9!>ZQ7K87_`CtVh>p5zZZQ z9?Gs-!{x5ka*CvC;t@eUDH{<~uPfzxo=Xp97O}(6(_Ko*JV=?xuyPl9q=Sv) zKa6OdcYh3Y1fmOgDHK3rg15bN@vUCsm80sv$mcd<%^ex^T(tA z$q5#J9a>wflY*RB`F{UrQYY$GOt1LuIgFRf>(uxd(A-2Nm2molFTihAt-*5FknC`7 z!fAOUQCWkxU;Q5+5aDoq}|z-K-~RG()ab57?p zXbx9e@VH_{KlhmKyi$><4DyqR^Rqd;rIHFhNBY7V<7LJ0(~#IeaK~^9d-7gIp5c#Xcn|-cjek@4cPcmup)_z{Ox|X!LQJq`ZU1pD11q?J9S}LQ+>7y@ zwxI9WhH;(r0nx>HrW`wX|BJ?j^^;o$dWHsT1nOfesDO@H7=WbFcuD$gK*gbqqro{o z12B62IhI}X>rVpTJbfumK=OQ=r?05-%hzF_G<}$uVI%-?Td&4Wy9BSsqX3}?+loZE zI+u<-Zdeu;!7OuE4qL41!D$8J=5Ucx+*MwWtbB64A+^2!7hvG`Rw)#{o;CJ7g?h5( zn(OoW!cEtwdVR8=n(K}{Sucr4ho0_r56ssFJZuzFYVZoo0_v(N#>*mV+QU{NMGtJq zuWv^=*j6og-Pa7%94~tfUopM19ht7og@;Km&~vxYeX{K?df4O974*Ae|I}LiRwoMe zk0Gh&+zN%PM+C#-lcU=(R&bwx`lzVj)MjX51L;nld=7ry+Ew_?)VAWczcz>8f!fpY zJ5+lLeplDd#Ba5B3Vv&~6Yx7-I~Kn)wF&$lQ#%^JC)SR_?@2Y%a&oOu|1yeNk(S-YNO<9Me2 ztTs}3rukGnKQ)ikUx`J?I6Fw;ya2=u&dyJ*shdZ)bI%SkK@5N`$Ty%gw89x3EcSpr zGoOSMqlg=|7r^&iue(xd_louPXCaYB%6o}kcjwu}sIycywYy3UU1wL#mkzYP{!>ZI zKBQ^0%hL9Et7db!+aJ?P#gX}0FNc9_Kn~mEY6piX50kM|VAP>*Oyl2Yq3`|~|6KU_ zH*Ge#f@uVmz&Mmaf?P zTOVZtO!xi?E*E*ogUdRZ`HF`+`PtCjm=~-#FY&(%u0Uem!BTXZX34VeR|IT8#dfzo zh#XCvmd9eSyWEC;h|tC#fzkQ^y*l68x3lplf=G};_?*aQKK!9n^6gWe{1TGWjiWGm z6KgyHqVN9~3N77(8#-{Scrx%@0An$x**Ie{ zMAz(ZMIMbKwciG$P~HUzkPRZFHJT)>g7NMs#4lWJHc27F>lua}ij(7g)icZ{X|AGi zxEK;ELK%h^0)rWF1dMLar*O%7p8q+)^~@yK*<<9Au@|uKhI?r*G*-Pj+PfGsUVMN{ zA;Z81Fp;qCGkFhI{#KeR`%)*XF@f@hr6E1j2&?h7FXVOoD9WRXZK1^~VyPtSoL9g_ zp&slL(nOXvwXRQwK?Rm4)8$YyL@ug4)XP>a;GI!vT@@RPPw%>69~0>fh0jvCU7CpO zkCo<#D9c*+a?pf%maM&E>*N(y3wQ_!B$~>Ium=7wAvIR;2<9BFlaR9*xUzN@fG{LC z)_^zuA1Gg1|I=44>oGH4DaQ}cvJoRVY#%d5QLOymEym`>vg_JfBdn4YrnL(}7if;9 z{tZ)iw9KQW#%vL4*lCQ$sxEEMDQ(2(BW9I|vsh{p=11m6TYv5t3qSD9lMwDe0m;y!3K*2gMN`pyS^{3FvkSuJ5`AV)1RG=G$Nodq?y z87vPg>7woKJ15;2w}(z7p`snw zEkriXgG;?Yu5@@5iKRajYK9Gq3c&J-I$%iwrC9!NS2YO`VtGd-xHJ*{9I@XhZ8+Z>USk(n_^Rw~tF@Z~KoS%TB?!&6OXh%23^ zTu|)lDrZcl$;IDq4UR^<>3L$x(vcP~pgsY4m601=Q&xyld)U!A_f|GKLP+H2MEy_{H~|6WmlLdmzd8&9 zU5626u)xeqj`*0B(j1}FqEP8I2edqO$|pP0WAW?6IruSANW>9l9EOtnP(R^D=jF?=v?{W>3z+CkZ)#H&uV*TF3!>*|1J>6O za`)kT+mf3G^C2|c-Q=G9E788#?S)K|Zm}Z%qLX{X&rE$sHR|5FAQH@PwSkm_E>qjZ z3TBYi$aX8h+{4+XwbX@KrXv}FM`R=|A|l6hA_1|2i-3+xA^855 zcx8pD?90cU=;ATfEOPT$JJC?Mu9PFl)J*)gji{(LNolY~V#pfOwo`(swlH=cgY|I8 z1LqXjUtvN*NM$LcF{P(J%Dw(}j65N=SHnyDQYT>oAFK%z7HeSaEc2NqY_@bCrkk?d z>DP5lG{@$`h$YhvPDC|;N59O$^ex64A;);i1N7q#k7<>lP_ZMZb71U=87stNOVKI4 z$ZT?LhgE{E3dP7I%RP;V^fz?3@jRA+(J~JTP)ZlhN$23r;9GaY@;cJEO&^Y|xXHYq z#7KsokxbQ&chKSSIkagwj(j99izLy6ICn+(QZ>^e7A3v1EAe8 zCxZek21z+m+VgY0HeO(ypY0|-9x;L4;GOAIZB6~ZQF2OF_35Q+d*m99Zu(HR3{$cO zc_L_+xqz+>r~qyS%p8$lxiY{D7U5)Gu1n$08@`@B=-O4=8J;V#9c^O|^1)sv+L>&3 z@op35c@=fbRhQICz^UK_1( z&P1dL@Xq!JMCNSc0noA=w1h;ntGm(|FmRH(EZ$k2$J3i=3_P9g%um=3e0cCCEHTAL zrKC;xaQoDmXp$sgv3ICJatAjNwhdrtSWt)etJDVr{`{OPAA5peih>GGM1RlU+_JQ2g5TfWpOruEhEMj3k=V;V1S`DBuK$6l%E|XLyES+PUM3LKnOZBm12q#bMoG?-xp zoXz*6ig=PicA&FZqA-eM5ocB!Ov!=u@=z?2CeHV_1rRT&^dK{YI5v_X z0S+Eo7(fVnKDai3t}j-VSehKjV;YFaoJ=aiEZ8wewvNoKR$SfNf$)aWdywb&!bry& z5mKYkn3r;XN?FizzJFu%yiK<9n#BVi+w7o%`eK8Enn?q*7nR^orskOE>_q|>@~DPpFNz3jm%@z} z8Hx^fVK_*fODPe}2u)H7YsRE72jk%^O`cC+Lun8RBS0eQ7Z4Qv=NLR~e{-h|7iV%= zj9VlzG;U$35vw*7C2JqDB$=As6&^7*abKKFR6620i&!s?_WMcGU&BJk!v?0>RR6o( zVf37e9Q7z23=M*r`pJ{g_=y`%G!jOS5c#9bjeE?;quuwSeoBOhnA;CcCR312z^dX2 zCgy)h>@`d0l zzT%ATk>`X3&nuw`@C-1?mdZkxkj6r`d|j+8GHf}DS}Zyy>+(rqlFcOOTgaJda6JOP z;J5hElUkJmfO6iebEH{LbYWw=WARRIdIjXX5AWS$pyQL~l_oaZxl+%iJzXnvjac5b=Y=W5k5*v{(1fPl?(8BJE9c=TID zi;e!9D9&9}++&!t@rb6@Ne2;poKVfTn5|&mBW7*DFgj&bS;vV)$LX{{_ojbl3v?@) z_zKJBPay2|1SK>A^wksK6^cXswK2>o#1M|6S|O6GDg!PP0l~3y=5Spn1tFRu#FwSM z-$~EmI><74J4==;pmGe4z@1u78&Q^>0z+-29mlmDyW@;qSU--j=3kILRULqj+NqKa zJw8rwxrc{Sm8h0U>6;Pro{ZQ?5vt0I>yBmp)Hnqb8H(>a@Q?GaQ=#)@BL#lKUy5)A zE)GL3g8vF(uBj{_MQ0U=54)4`1GwOC8y`XA4*c7TI9M5t_3$HY*VD9-VbJ(!TNz_l z&1cOyhv0d+OW?jpbTH5PR4;(7ke)^7^!#s=LAa|#{aW$W#bf5taflcP;@gYi4oRe= zjxh$FtYbb7f6BQ#(m-49$#5|rj>ZA73KL$QmH#8j{yPM55?=H?qhLc_6y-dKuO;Du zjnWx9*y%5yOOWTwAxOKzV-VqyY&kp1yAqfqg=I<)avga{Q?z>~{_b7$y(|+g(K8&) zTN1{-;Pp$|c?1VR9C%%ripB#PZ4!|c5}RIbIDYtL5EULN>x>>scYDN^fqPdtZ`lQd zMR=4W5qZKBA@Whzmggdtq|*SOR(ZxRl->sBKKi zxK=Bs#htHVp&I%yzs2S=CaAbDZxwLX1a)$f&hY$Pu|F>r$?=<1^Amkudh=aiYW?DN z{R=tl(Q#fhZu%uS(Rq{{)+a(_R+VvBGbkQr?#$!h#9tv3FMBIa-^34bgxTP&FgeB2 z8@gDmvXmUon~ICK)L9&OC#8aQ;(~MH;v*b%Kg>|QswWI3y0}T^@9D&8R$LZG(gZa3-5uW`T z)N@$2h0BCIm}SdO*T|)uTd*vAku2Xh6-!+{q)iitBWhqjOiBA^TpSRBudpA&_eh%} z3omXrP5`D`zP3I!6Uk&)sp)AfqqsK3NuKJH8pkuo)S^1dUI*%UT|24e;an;Y@%IN< z!MXVc&e}n7+dfpf1Dj5#5R5ir3kTn@rV+k!E2Frm)N7^G%wrWQW(Zuz(Sl*(atm6p z9d5r&qt$ekUE#8t7HJr+gk%h)O=TnKf-3ilSz$YF!3ooG6l_1XjDQYC ze!g98eM|Q^q>g`a(<{jWW5@4=T{bUf+Y>i8r$ z%15T?Mr$VJpNBFpRQ^@mcAT6M*Eh{OncT}vu&fdHPCSr!5~^>>Ob2cFvvy@*kLK*B zbszENP6IZloD$!(`ZPfP=OKJ8`a;0)U|wDsZheZdCV!P5=r0E5@fc4DLm6YoL?VXk zh)w1%nPEAiDDoLMjY#?#$d8s7q7qQRW0;(bDJWuvyHFhOcT?2@WI%H5qz$KT(ym+= z@m1wht~849;;mVm-v*LD{gf$c)TT!=?`v9UCd|jk99{;ZD;&V-rh+sMk2$Fa&4$BLHs1Qy`*)u~0AFDv z=stB9u@^)#POjrMdPpZzhk4u=%LA`o$#{!BEhgw3fDYfTl@eI5&CBXl(kt{<<*0Th z&XV-X)OJOg87nHJolTiXwIEG;oJ%|ad@cfr2LLELyHt}ael781h{M!SQhzZ*77vi2 zQ8hd9M3{B`EIID>gw6I9pkZ43Wn!a;Knk!Q-y)PW37FTB#50X=!XcvlopA|pV#jCm zB(Mq`ZU;E2YX{C`0QVn>7Jg?uN<`sk<8cYWFOUmf=L_VTjCKI_evJ%2Ivxv$>O*Y7 z)LYaCicJFuQ)!hdy$&9h%S)}WE6H3%2YaT$_rhRP=P?PqN{0T3nF>DFwHqBD>Ol6G zX{LamYSb4$wwFVg?jRC5S(ycnZXz;l>8@=Kn_ZHZI{JaC(29($Ia#)qVQUsoF*_R- zENeFjlrP46;iv~|qt=njNl#uPmquOIE*YzQ?p?>qF873qLTA}tWH-KlCKFwpA?a*I z$F?AIXh~V1UXx61t6YsWB6pQvRKQ>RXC zr?!x~!ulb$h+;F5T=hr^P-UHiwg_ci=Q0CvOl1bbxE~M?DPgLY*-aXNDeMNAM8+I$snYo?5VS&W@_3Q{DA)T+?1LUH{*mYcEqbj8lN z*#_v3-Ux|se zgxi2QYy+Z|=f9O**fqpGK&;u-JwRkL;n)L2tMbF6d>`Hz*XirOwPE$O@)-i7bG)08*g1*?+r4fFpcl7F@SAxZkmE)Q zag>e$zi`JI>phl+thX@VGJA@n21Z{+)!Rki8DSXmfD)a!V-EKof%^A%OJQF=yb$bsA2F}sGNa_+Fmr09R> zB(h#SUZP1)Mopv>e$$hPPSy=5lBjALxD>y@(|fa^n^K;{0-i86FQ(hUB1S@ zaBOPhrW6Jgw-%1NS*dIN>8@x|k*|G2p4>Pq#VOnx!ghn+xptY5bp0+o3Bu5rJASEJ z-!&<%IJk2CuzTgC`kBQ_&tdn9NidCqdgWN3K)vE$jhszyQZ#%`kSQgrE!=`Y0t=L8 z$%Ba^01}?9hIw|m)iNat(FO(S6NPAsbS%JjnSXX>8&V9!4|gPH-oT2ETLu`x>Ba6? zHVVOG+loyFnRpId3x*?3EY&7PFT+vAprT5ozY1!WPUjHj9^<6xFwwV&&}$zNveMA+ zTwdG$B#xQf{>ZbPiUy^~>W8B}9TO8CXb61lD3rY={^0L>z)TebNwEo36pbXYl0M@z z^is*6htRt;elDwDNF5fw>1)cQCQNasykVc^H4d8Q1eV%FeGQg1!7^Ks49`43kJ--L z%7Ufwj06#hus^T4ePnDsZcc)SA zX!5;OpkBe-0MJ>*{XyL5?fT|X`=0*MuU4b=kJcRi0@JLj(TcsixXcR#B;?~%7vFLm{opLXUP@S)u+HQp7%uw>6~kDvxe%GtcMtI3 zItl?p@Y3@!G?6rZh4Q`f+3I93E;Ss)4mR^%B;Hx9qT>lF*49L1u@5wn&Q%qBBwx5i z*KKyf{_+~2Ce^`NIqGau}_zPoL7tw7uDOBvcgJ4R0s zDDEeyHYoL2+|W34OdRwy)x@g4nImc>M!ebn;epAE!n>5r9Ec(#VQToqBz6oukjP)H&&a(kvijm@>*rktDJy2loK} z7kE3x15?IdIJhrx{#q27$C_Picb16mAm97_o`q*y$pZgU=V7VEa~?zz9b zLZ0%Z;{%|KliH~-uW&Lx@$w4g!M3o%q3_$E+rsVHIR`J#Nl6DU3&pc@Yv}L?8f-8n z33_p&U!N8hJg95tot)YKB6uL4EcW;OPm3LCI(#ER=dQgQ{<~!uM;Qh$;7lr9^6eKj zCCB!BJJR8wz54*@t=!83+}*+=`;l1xf?8L(kJi@81N?MW9^}VdJ@^yx*;RSSd>`hw zt@1N|oL1c%n&IBiV7xV=$^CDp7s~W9!5+M54l-JJ8-&UOx+)oa=%rF@AOd~gWo)c) zGy|Ip+zRtV{rnr)1eWduTOirYJGHh1mhJ+Ka?fnalvpePkbMFW%MG~tlsJM((Jr=F z3Yv0win@>wOG4Cz(54EHk0?wowj+@FaI94U4>KPGu=m*DH7}e#B)}Yve=nA6N~<^; zn+(6c3TOFOLY8$E+ZXhL6FL%Q9YAAbjG2w!kIZq9{s|H#ye+jtP{6~dUxiKb->o+I zMxTtiej^X}$qfx_$Xv%9(!=U@4n?H5ec=Y{B@>B|&k0A*R_QY{dc4Z7{1iUs;9v({ z+2S};CK+6XI35n4``6a12RgKrBPX7En^Zr8E0TCK6>4?8+qWQ!_dznqz1!E`iOnn7 za%%vvVhlOH6 zK>d78@}i#?w?TuuD}`1Lh-;1vJ$E(z%Z!FT+Ph#z4ZY?O`!lJw|8HyRO)lE8$xzkx zQj#_5`asyDT)6)fvNBnJFGVK$d)icg&(>n9{=T=%q|^q6tFSPbu)QE@8ZADdwOV`x zr`V-Cu^yo3eQ^Gpkbp2K9VCQP+5iR^Pc(I`=XRNGeuarErvQ_m!&85mPa|wkwMy{VSg`v3N%|Op%!mVm$F^t>CWcpYY)~c%Xnn4& zX&9IeT2FR9okN%$(~WA5Cy4q$q#^KDppIuTR<4o@v647_Xt>r%K;kxZV%$!y;XZYk zemXANbWJ^|h#0vlKbW2#7dXBqgwoMJH2Ou5YG2AgGBh8(gKmi`nD_t)h7s|aeI3S^ zx@De7P^UI&+2u8!ZvVjOQ^1BvEiu$$X544SOx*}D9Dq1DE+I#oM3} zl|KQZ`VyHT$RuR~O*D&2VfCDW7JLQ~aC;ZJSIaCkNc;AzlrNe_Kme#EQ7U$usj}GI zTtoCTQfQh3Y)ChSBLh686jNm`88e$0WAJX35fJ?b)Mj{%oHNHA6x@i9T< zahngo4RmNr!t$ouIO)gWhhvRd7I#_AkiM4O#0g*^U|Vz}@W{G_FbHkYIK@atLjOk9 z2kY3RNio>XHUvk`q+!*z3v-u7w8CgJu~2zD@_>Vo%u_GszkqyJ+EX1@V#cmaB@dp5 zJYYYuSEH=VE(?n*ACXVCE}U>s7<$(+G?}o}@F*h4!jWRL6N(g?ZD?I?5%~yP?P#m7 zk+zy*BuY|B&kW;3Ie1{kiz&!i{qW^Bc9`3lHaPHLgdAp;iV-u1nPcWKvviTMn$b?I zX0#KN1tnYr%}N`q8STKq)=BF@%$!Y*NxNg#Uzr%ryDMyJI99W%;U?<2Qed7T=Lu#W zc9@t)e7f4!#3qg|C&Mv4yL>**hH=Zl1W_ij1`k1K*K^8KX%=s`KE|7;hC!l$Y1jP) zVRO7WhWFrt^UbC^21rLBVckIh3eH5lzTgNk7Dm`sDOAqoa|_`_w(h8A3!@!qPlV?l z^(bmXP__BBpO_qsZpF1uYSZy!yLpvejz~*M@Q5@mF*&w1mG{h`mJyQXZUr_Uwa1}B zM-}X1*~Ki1gZ?VmT+hgw5lQ#!0ceCPFpmYiFbH96hcGUAA+9FG$qW0ikL`8A?MRZ~ z?(HmV97y3~A=*!H8 z-P7;5*>KnApz7TFC_)};SXkq*%p1(E)tk2(TF?ZazlZp6>7IOhGOtCtf)}qz`T2I; z_%MiThx!}rw*Hvi-XFHpJ?LJs!7P|M3rRg4dzfC&dOOy~Wl%-Sj^Lh)>|U=X+0q3}RMi_jqk1DXu8~qKlROvNt$ya4K(3o5#U}G}>TdX_ zx=N>YC_D$cy%xvMhn;i`+l$`RQsvq1zXL(#@8B4kettr`?5M?L##< zdau%h4D_pKXHxmkNXqF?Vsb*8iCp@Hp`9>pwqx#`($8y2_yHa4&+kP=csuG%7;^~b zElrihf@MLUZh+0psBi7!$$zXF5-%R|-ccX*^Py;a&Tg-dMCXibgBMZYj>d2#-L)+d zNvH9Dc9Bn&k|~kWLSelLG;DZ7zGJya%HXH4Yv33(J|;Zl>ZyyZ3Q0E`y6U%T0caGm zErS$ruGkBqTSh6d_;`VUls{hSM2{U_{4>g+=C*U`55>X66(kP;tF@Cin3f&@Nqq+u z!Yd@w&HarqTl#VABR!}8r0lERa1ly1a-|oKz-sv)0Xoi`yS0#X`N9};(1v+bH=wuz zGG64Kbbs)XKthL?LRn;DE)X7x3=h_D2$z})8eAkfi7}p@PYF2FDH1yTIQHz5tUT_C zpvc|J@-`yZi~G0GFkS*}4NJnv2Y7dgfxr&x(%y(K|3nkm^>=RR%A*0;+k{>w9lv}N z*K6*;nb%MTr-b5rleJ*K3T~+d&#r=7Yr%7>V80fes)ADhYg57&z>GuD8kv1VMaIcRvbVR)*-)1%fSETdiREk?y@%;4T4L>73%mi4HV6sqT1X z0c>vN2$-_wz`c6!;Mgwn2vWfuRbUvm=d&yS491WSV;WmjVy_xM>6Jgsd^DqE;4}xV&ie zwlyST_36@T5?CXQhulHeg?OOpt%>1Oa1j(6S;?GRVeYuymS4>=`Yev4If3J!T_%gW z`<#VYTmzs>S(#sh_2Kq`x}I>?-*9j}H!Gx;A}XdpnjJpiCWTQZqxBUxJM$>G5l*3^ zqT*zJ3CBXzV+O!$3=%F?>~41a!G{ePFHI0^Tv}Q>SHZDDYd*`XOo1pp30yU#hBLop zO`B5Cm}Pep8#Fk0)EeIkrs-7O&%*~AQ8ZMPmxzBLlEQMBh*AD=TzLr(3Qp8NAlFzL z59}Z`%&`~tNP^g$ClKB=qPEgwpkpUH8>Yzbk^FK?nOIQvVe8Fkr={#?>MZxL`Z?nj z94HFedsykYH;+3gB1)8jA=uASgV|ImDi;Mz^+!jkW0}G<98ZfG)O4cA25Dg@)8)J8^A2E9Rj7ny7X~^wCl^O`V>oJBp;> z%KB{}aj1?^P)`u(S9Qk^7^|}9f&+L} zm$-C4@K#d>-$FXDq6|ow)I7ENVppcv<*vZ9SfSO3rvxbmO$bHVKxoC&4gE@idzJKr zq?YyH)tWzmQD#J~#S0F|GY%3ve=Ax9#FQ4n#0(mUn1qm+YDLVNCgWD!m;FwxKfS9e zS7>N#se~*M>4*!dVtqu~(W0Mu2wfo1GxyvW$yB)~lJy*yqL-!eOEF4Rj3n$bo3l2F zC@mWX7lag|IW$XNC~&5VW0>4konzcT$Z&RWuTZQeb43H{x#|gkUF}CWZ07fIl&a-)DHdU18P}v%BgA^4v z>~tQ-uLyqJhu`q&m@Nje18l3712~N9*QWcRSf>LU89X+V&r?WZ8g@)^rvq`o#u~<~ zZ@SMXX9B)^CgAI50$vQ@@QY{idHzhmH8TPGW&%RdG@V!nz+tpv(|y>~O=HD9GXcLc z6Y#?`0ii0Jj&m=7**#N}8hY_G$d+l46Q@CrnFd)f4T94sDt&?cEX3sp5y+%Fw(0{Q z2799$*xj>&4`a48o#e}A01lO=q8&PW8sy|@kj2v=xMg87c|*97VKQWC5fcd1TIocz z4(4$EoHld;Txz;{dXa%a;xP3a726AAJ)Z5cX|B4P>tZ>)8i3JO(p}R256(|mwcBOA zSjKK#nOQ$lYT6&&+e^b;gjJLU%= z?#>eIf3i3nlS~XvM<3*g$cv%U)L{anlJnC2=O%Uk?JIu`F6ltFJHGfQbjbLwZRy=& zXFRtk`Ck52Lfp)+(9bUZocQYShGDe-!Z?A2Q2H~1B+!hLU`NU2Y-X>)W1Ey z6hmpH(2Suc2G$IYt|Th5fqUidog6Sb-?%jqGt`!3+kzp185~FYRt;nKDY7?pOg4E$ zHklA5F%?kHsHHz5bG^sQ(MaY`wmhLMr06QT?`W%nA&;T1PDB%}#oiTFC+2B&dso7V z(Q4-&!rk+Y9>~JG}t8vt2GC6_7I4B#1cU|^l)eI zm(g{)GyfB5%U_6m@K1Hg=;_uVlx+)xy6TWfx@q?op6Nnm20Y!F3IOXAknEVN0gj`) z%UTtvgN~nYldj4MaN|(9UpbK;e&r;7%0yc_3kld|A~aUw604N)XF(s!*e(lvtAv(_ zYL$p;73u|P87nFw$w6_p=nL(#dNQaTZqteY`$|h6vj(n4bvlJxiyzj--lPQH7`%jb{Fa_?)*er&tms z1~1%pR;sAc7i!Gtw3u16giJIdQ6!UgnWeSzBvGrgM_M%22a}4uyJ}k0Qh5nNn0fhlR;{bY%&$)O}*AZ~^w0 zhzxA2^1Y;1LQN5jRQ)CaM2r}?Bc7hsfHRgNSQ7;u8z1v?Xu=9{He)e&@KCzZZQoKb zNVX#;?2@{%iwGJ!1)HjRe(U{YDBFcCX$&m6@IqHfOX7vbwiIv?ScNE;W=#@r5^d{6CY#y!jfe{k)B#%VQi(5l7o*pvy;p&{~UuTiNob5Z-C zC-pP`B!drE`+{>pER^I%|G$f*?|wbPR?ZXaD``ESRy@jxSw>ssEI2gX^N=q8z(iuH z@uy072P5G-!f%<_O0Q)LP$st0f6&@ec_BSpDi`QyCqI5=J3nQT(%n~81tT48`DPF^uh)&ukMGerU1NU6r%(HDh7NVw*^L=Qca0+Buz&&JyVWb6!CI5qDdK z7PyJ1vncq~;SYYnhs<-&)K4Ln+ePMuO)q2ahQ9`&T_zp%(YeLrkO5KgjN|(={1(7_ z_-YBmNRiS@n175PJXm68eAUm*kmrZ0vrB?iITiRg^-NdBcNy7GG;e9N#{8sN|Q+x7MNRT4~dbQwYg728fHgg#ak z*5~%=^|?K$&qV8{xZu4_+A5dJ`_)xUAB2G!R`%4|WZG38HrRX0h^-CYo=a&Jp*G@@ zL+ilQcPBxbHjZ;NVruj-cxw)&>Xib*SJ10bOjFq1P}v3qwG|6KQmHxw)1=T-DpLWa7k&1t~g(yI|zr+w@IO0(cJ z`Y>^~GWXJ8*<}Iv1k^Cf&eQ<{W!31GDrv#;eV9HXV>h4__&38E@HnHr3?j=Trju55 zGYQ1!zHx@gFho!brY+g3M=y@ZvaiymNmG9kqjyyatBG&cQKj+VkocuY%XBr>?FSLk zk3=a44D&jMvCHgExuuieo?Vl(WHv6u7!&zr{lZCKxdU}_z=`v;{~&o-B(FVp+rP33 z3m0^$dxRiN?Z78Iw~?tw3VqN}IQTB~dwdMDSbg!vDU>P{2@?DYc%o^}Ev?Bo*197T zOKP$a)Qw=IVwX8Qh#+75$}Z6`U-{M~`mQyjg_i@RpR1-e^hViK zib(mC_QHwzpJSa(LBn5quF+A^w1_-^97j9qB5VU0D^39kK=q zJ2htLVth*&@Wpviia5~T#G$nPjoq~jEun7P*o{!t5#CGaurni;6xl!A6%fa> zQrH3sB}<}ne?*lmPh#LI5a?2{M2MjI-v)u^0wNldCj$th5ncXCcXvB-wUg%ecPLG;5=GO?uM z=9}OwZoY$=cN)E>>`=-zV2STaDbDq&!Y1sXm3f>~0;%!*J$`+cg+8w#m5gLhz|Pp{ zK|BH;8BaHRks>Gem?uWk@%%z~jd$&Ry3X2~j7E(mhKtKRyc}S{?!X%_SkmDB+H_Oy zGj>e(=3IgtN*c*fx+xjYo*P6@Af-4{ic3n+U>m%+&O6zV#m*^4^%_J6=7rAd81drU zE;xXBs~1nllsfbj4PARtm<2r2+~6hhw{pdi>yGL8z}x*~EMcPVMvqLv>40T zR>W%>ua64iWV6?ljtyo^YRz6F(rIEk%_;bh1qjkCIe^v;y{Ays+y!1>r6q|QSUt?5 z7!XfKdmTH@OG0xXVLY!n9ow<(88CXY^7n#{XbK!?(%c;M8o@tY5Ui!Mavg@k+GqR# zL{le$O_nkO=#Kj0~1vJ9_XtuK{k(Ob|Uk zN8`ru(8-Q%S0x-`s0MaQuR<_f3kS`POl2kqW>_yY*f=>-D-K0Tv@j*GCK~DU^S;Ci zPmjg9AO@Q{7kpmOKxmUufe6UhEG)w>nakU@kDXnY!3P^ORX6KdW zHCzy;u$Lf{g1&cql~zLi+)2-nf?eJVe-glOojGjLnUN9=*Lf~N`V~gOXCl2Y@43)& z(118AN?%r#Z5mtwn7R;de4F#!5Syh;dtaF`0@|>i&ujRy{43d!Q0tnE#QdG+%elc`a6IW-c5K|uwhi( zH?hUssl1U`^k%He>uJ~F!R*xmy2={>6~53RzbdrFnziRpXinefOi|s&a{FM71Ld~0T5dgYpZ@`q-%BP3 z4p24WIDwA-(f?%36JfukfAsG)_LJ94z~5hE|7X>X36{vwcR>%XkYV0ygobxe+kAgl z{_OIb$mg}FOSIS}JuOUL_Tn0XbrP4ZTG2U#Q^o!8;ibhQG3!Al-T+7cYeV%2)kq7G zU!^>JR=EuN6%6~O4Kep#xxTX>$L&&jS`SkoW{4B8JD8`;F)Ysh3E9Bu21mR9lj!rq zp!=^}g=lC&P;mw@_QnUN0rXnH%3I-uy24N83K*35x0o-1bYE`1f&bg+=7wCce9bQN z>*p4tJ!KG$piu14pl69wUNor^0eMUgM&$hw>{j;xW`arsZa2+BokM~Zpw#H2e4KI~ z0b&_EQjl0~gm=#3rc;R`moWF;VwcAdqW4Gyr9}~;MbczQqSn(2Glu0d^${2B1S+9{ zzTpgVQ|c(|&3w=-DuwM$5JAx}gyP{u7Hdhu2ONLOY-Dzg6Z%U`LFuKBOxEU0;YA0_ zeM1l)H(H3}{jdb6VEAZJ=!p1(?=yYOzbE}^h4dWLcPvyy>spqX$y>+dtR_ZJT??LI zZt9};iD((7GdsmGY6ED)1{Z!@939G>Nmhx8#S>mJyIBA3Ur9iWn+gK|=f&55T zG#`Pyt6+(T=>SY((=bc-{twh%t*0+QmT<8*yLXP-#mT-Mb4>X|dvrDF%&diUuy5Z< z{w`p1$eRz|RCVFZ?Udg9?Ti|+#6E%J@9R*uxG4p= zYED3uiAuUdp7EdqSDCyYG%R#_WOXI(;3ZAR!NtVF+C-|}X~@or5g6MEeGQ{T@X|3l zqIi8Qx(kc3c;N|$0|p;(Vnv?GB4K({9rZAzxkN>j3<`PH12N^V_NuzU1;(Y7jVMaI z_K=)-HyML=j$%j;gL4DfjowBwg!Rn0>5ckFZ)ODPW&&^1|9r=t>Twd|^^c|_fk*!+ zw&hkksRK3kC#v=O7X$f>l8$_FYdv99H~1X1^ZkyJhrfB9mGgc8fu}8<4Jy z>Fn|WpqE)5EfCecIGvgpJ&Un2pcG7fH}hbZ_Xh!KkwssH>E6i-p%`zt($5k%UR#?v zs)8M;jGF7lIHYIP8Z2fvW^-K#+bf!FfAB`Z%eeyEV?-dSPNBQLLQ7O=#zCH1nu#)0 zRHShU;1qE;`QQ#sEi$mh2@PV074wGHTe2v0IKiHIVsHwYtw|Y?HEQ}|)nB3`Bk{5Q z$WO7k&L6zH2QQ|EG8dx&*pIk86E9_qdJo;r{==SXdY)`PUJWfEqa`ZwEAXR6|PCK=a|}jvqd6OB+PN}8^9YWQ_Ls1;H!X<^KfWq*o&h&{GSDNyp zSb6dJ91OWH!9!kb8*$Lv)D5ajn7S*WaePUV(Jn=bMsFTOc#d(#f_UZY5yu&LnO%O5 zByugxA>3sO-d`txgEZAwY950Hn~Uu7v-zUiv<1DY0|cD`G#4sNSJSvC7aTavc2!gaZ3=uVZ(3It!LJdkVsK=a# z3cr0*CZh5q$yE7~%dRA+;a!V|vlxEzy3%vKyS0|>&+UX|7+D(%L`V5;GGwG!v|Kgf z)M=#JsR%bh$}Cs1g0>{6fU_aDXCN=vvwuJv_9>nMUBEVsIeVh&!X<-ON;?`VjZp?2 z8H-7cmS=7bwYa^ms}Ex0<`R9i=E2~N;ssX63cZiUMlH#nsCK5!G2DCqRoWPteZeID zC46o7*%P2}}MO_GDnboJx>N3-NQQ+i~gV7PkfH)!! z%R-Dn@y=#ob7=$pto!|SMt*kx1{7BQ6Y24NDlVPqfWocz}?+xQNV`;{-~=VpE~*Rk+2*Ngd4nC#O? zgp9Jqf^j7y>N`PIC5V8)N6~wT;{-bTN58{%C>W56hZ%Ra9~XG^k8ZEAf2PL%&#K*& z;UK;oQ%RHn#b07tj9*|cB}q4=YLMjeCn z=D%!kLu#$}v7Tl=fE45U!K0dV)$6ChO|KbhiKMp-HAT}G48>#VTs|C2FUA#isS0!7 zW5?2i#mr|A1(IJLyQPXD(VWV)m*x!)(Jn0E2v@;)q zv+{iqhhyHE8{ohL5tW;+|FoaK~|={ zKb*OdIPio4T&a=Pt!hiB&)p^rF+RAz9RAytM+dQJEkxZW*wkeF0Gpv*_RXOM5gFi? z1d+rKK%U}lRKLM( zeDTQ1h_P;aX1mB}#9D>Qa|7gP&gIw(Fgxz!9*q{PMay3cE+j$?@{_SF_PDS@dC_$97B5z)jf5@Kd{{f( zoPQuY&&RqmM&J`+;{|^|R*DO{&ui4aLI8O=ZB zd9Zq(7t4RjPqt()PIo0+{iN?FQ`v={?|Lo!ywufl06B?=R0DS&5}s`JQiz-KQqlYm zwC_S_?Xtweo(dL;)9U%r%uT{__KRMN*Lo0dm+I4{`8Puj!xk26EL0s&T0voEyz5#V zwZ%)+h_VIh&~#hogTPVwJluBX!_^W@6&hMuWZ-=quUVDZRpTY!gF)#_b;~`_`V|0mp8_rJi5k3LJz79WcZ6_M1^L3~Wrm2Mc1bBrY$jchcU%`#qn zVH1wy;IVly3OzADcqmg$k%z|pz)=JP>ixkVX|U+ZFJl{R=5r|M;m^W0H8$f#^I-|# z%F$hH0h7U_(1A)nu~VluEgdbudp{zfU1)Ya{!6O>lN(h0!N+k$T+{yl8wz6hoj61% z_4>cizkHDOn)_;XE0gQ{2bC$lo09r2nygd;y+_2bhrAmvY~q3Lhy=;~9Je(rP?kl< zu(I+saN3QHM-RHO36{zo4O&vUyYXJD2D8g-GsY|TuxS0to%*?#AHiL@o7OVN9KEdw z@B$F6MPYN$ZFo;54-;2CXnl>P79PhrKnZ{pjz6a0yA7ok)%tX|j{|-?si(e{9ph*jn ztnY8d-c~c`lEOBHh}Tt=7XlPV$4YE=XSr#$*Rr|~p#Y+U;T;H={|jX$X=wQ!uDfgd zT@?ZNl^-$D4y9fuA3Z@{G!ra`V9zHmCKVDHb)YvW2PxdCr3z1m1CAbbsOPrKF*v{T zoxwKj%NtB$gn1*_$M=f(mHQAebv7M8CgFrSxKLJxF3uLbuchh*kuF!7zY4_)Q|W6M z4=V-SLhwWtNB`)+2?4(T(N|RMD2uT5JCwzTNKd>mRG&@z4cS@Y*wxXYC>p|pR0Uv2 z+z@MY^N&e8*ci?|$RmOY?D4~J2!+pW_vuvrx7>=#N0{b&mNy*&r4}nak8;v5VHBcl~ z9tL-9)d~HIRvk}@PU!Io_jwj{I!{b-|3=)R6B7U5PH{geZr<^u1^H*XTPy$MCshf7 zgqf5(kP4e#e&sO+^eeyA&!haL^Oe8gOG(17*$$-!oD{b~RDMD4%tO)=-!A4I%)aao zq28Z=wqKf$<$yz&c{f0ip#4L(FlnStBNpSd6mP%SWl|;@AF))GJfy1hUc}?tqc{SM zk2p@CPygtrD1xH#=^u4YoUor-W52G({)ehv`^sSd&}1DC^tR7(A0CbX=u2D6PeOvw zgv2j_ZlwvzK({bf+6A}hy~6n?RG(2sK3Pwttet{<&PE+&$+Yr>04?s&AX=isu%Qv; zM;%><5jnTg&U}|lHl^uH0Q7_cOlfdeN*ZfsTH=#%DIGQXpkE^a)dx}PR39YrR;G`8 zCk~TR+%T!28&0)=H1VIR4+>d63YEGtysd!Fh?fD)zvN;IM0NpcEOPGWoHa|!fZ!u;D1J-5UR zt62IS#S|BG|7BMHzY|8OCi63QRvQErQR;Qso}eJPf2=w_a58Kk?6L!4>BDi%3N0!C zSSy_@^9Jc%L@gT_52ZxS`b7Y!W|c-^J?h?rhn$6nL}paqZ&|BW$yLx09;~$%EvE&| zP|&8F#Af7AX!fMN^DF+Y^Tkd9Hhcwj`W0+DGdj!Fz|A_Y!maAS zRuNH%Jf;Iu&3si7O9PO9+%^gXV%(B$DOOl#DC-(8fnK*`{loUk|iVf(}%_p;*BufvPxANSf}Z}-~g2)99l zgDtZ3?<%0%7znomf*of9`6O1>2ErYHpra7TwiqF^0deL~*^xwbqDQjPPYmPUB?}73 zhO?5h{p1`B;_9;;!PR?naGNp$MaK)tIo=#^_CN$$t5h-na5R!z2>oY$e-{)-{j;f4 zDz=@S8uBKh6q9oh6!%xm%^vB^jpRLVZgjBTMfl=AZ?1nJn+WV=z+7Z{t~VD9xSJu8 z4M;x$n&uR7lBU65em0anx-^$;@{^s}R%lc^mDya2yWZ;rf=;h7=YQiTyI36avQWx;UHiOw@SX?ndEPuJjxN}{ zyeG6kL*q^>`r!fCl@4-h$N57V&&o~ME8!mD%s;5;rjc$o~th?T#!7%Ti~Vw z#{#e0Z3`UT-a;2bq`?+?N4gz><47;#&JG+I?)d&h|0~vTGvAYeoW~Z-UQv9pB&7#x!&MD zM1m1bw`6{fy5tQa=%6=G3Zh^+Uz7sk=Ry^G7ZS6(%iNV5| zLr%eSWcecr-Fyzq0kgcEmjjtOAchTyf9)spJZUC*$X}gI`pF>#8@f8#nr-uj5N^n8 zO|}>iKVAzI_g?GJ!`>{Y;xT;WY{biZL%^Fy_&n^9{Krf^fC_&R>VfYqs;vi$5N?sT z2=%~E9-S>g+aH6@+)o~p?RUMS_j$)$?ZtC3V@<{bSZtsQi+RTY$1&b95dZJt2wscH zFJ@~4h9N#MNz9lR_oA6!kV!`)($U`0$oN~#GEg$*Cy&i8f}kDi@As3#c+66|aPL?y z^b8lqdR_XZ_ItyKJM0Z(-R8$|7m~*^NdB9Ca&b0|AdAOvz}|G36P={D7$FyXi@7-D zCzoVbBjl2?-bH?LY4#|S(h{b$6e-OVe<|WG^_C+3o!%1Imv{)Czu9j0>a{~iH(?Ec zO}?L8mhJbG%dtpo$ncgU!g6o9DWhdq=YJ7&-rh2JE%TP4sJ`bXS7gt1y%qcXtCK73 z+1^TnZWR`a+S=3y~^L_aio>^DnjGZ>o$TWW zxt%?N@Tp?14I_vE9>!a9;X>x8psDXx1NOqAS^;9w@cu6#9xQ26|4wr86aw;!w-sQn zc$5nj<-fza_(524cQCmJrO>jk&?)2LB`5=q`!Jf$DLKwK27crWHihvM8i&?iEbc*v zJ7Q5PcvgwGz++F@cV$fFTBl-C39Xjbh06r3%dbRHu!TvWEl6BRms2TWELnAiDle&Z zhAS7-DdIDXS-a&W1X0l1CP4TEt};>KG;)BuOk7wztGbB{Ys66=b#B2;$gy-hcNA1s zfW$KQQ~qk%bUD&9Y?<~&zn5`x*t1jxcFS`Ar|AacZOlzPG#!zql& zV$p%+)spZclZ)MpPA+$9`)Z4xN;a078!hI;FtQ=KupH|}u#2RKC!rnyU%hCo7>ghT zj4T#UV|cQ|2Gn!Wet52iiMWMm5n>aDf20Tx>_-R$WExrFsbtj>o zCuL|Nt~({>G)B~>nDCeX9hdrQ`{-JaW9a@-)-BoR#<6WORAUdTox08>UX;yd0y(3S z!!5MoC=dl20;O7yvmwsr#>STX-8zl_Jp=gK;%T^aOCk5D#zgyHs|~`Ac)`?lZ4*X7 zYZQUVhFgmu_bbf)+4%5OcQRgKljOxK(mnwrY4N2pqOp$wNz8NIU?TrCTBY1?74si! zNb5o#t=!{=tTBwe82dl1wnlyQl= zTY_p@_bc|4riH#;Scx0*(cWk(&}?%mM_j=wW~#VJYl{JoPhw2|3yLKu58TrhB*H8H zo)wYCIVkMHMV!iS-OljaRI(n!lr4~SOy)!;a=-QJ+s~pip52KXv&WMO^ozKo5yR(* zSI-U+W&#E}#1)#f@ktdrNALoLa8tv=jjhiDKs!C*o1n+wM;I?rOV5?Sy6RH22)Lqh z9-DNeUyqsPTT!;r&XGs~%@MK1#=+?>UX2E`|H3Np>8F44^j5Z65(sMwxE=@)RB7C! z;5Fp>ZOk?s+cFQbMTilEN{+RI+O|Ch7e%m_mkkRZQ`(Z)HnYx5X#NH%k44tCmr^|%@W*G6EMN7rGX8GIaEh` z*v)eNbk^kG1^O_+C(BS*sugk?^K%bqjgx}7hg%3_Y;pyPU_J!LPx$rP7R;dSgU60Y zpD*j^(eVVk$Y__Wm)m|ldnHq4vEqdlg}Uw&BG_k$g;&D@By8ZS*dbgM>r&Cts6Zm9 zme-8u#$~({;@$?;%i~EiWKVs!NF#@4PaC-kHG9y$N+X#0@sx2#4ysa-O(=E`(NA{5 zGp4I(QX1bhq8h)o!jUxCiq}K5P;l8*M1b7AgIyDb&Y$X-o4XKY7|u1+^HB>w27W3> zFqRuL%)y9m49|r1ha=I$cF)8h@Be23wfn>9mPPxF+1G05jHBgYeGH8!L%2!0--Yqt zVb1@ZXfWoN4zkHua9|9VlVZ#tz>Ni`-Y}WK5vC5@J*X`%20kLZ{<3#tcA@v~Io2ys zPdLA*)yZRdJXOH>Lf6P;XyMW+JLt)CET4;=5^i_Zq0d)08xk$OUdTT~;;lrf2fSB{ zz6dsV1f9ET=)`?Y zpfmozMQ1>y7nw|BZRcZqZiNa~ELva8bz|9#iT)#E-Glb-6D)T=lBF8pNLL6zwMT30 zRER;Bi8*Ad;NbEqoUDO~M=m-?svAl}`JaSv-4}K~Kph;V5%bfB52moe^b`z060IUQ zUWDVI2nJmkR${q@~+|AtHG0uy>{@+QBovatb1U=?L@rN%4q7il-69(>TE% zILEbkuooK~Uw#RiHdo}vs3y=vq_FS$SSYN#S*ThKkc2SwPiET<9sa=MHn(Mq${I?o z@L_u!CZn=p+nW{2eZzBm2U6J0-Gzjc1YH~PtpNwB@YaZfW3yHEF z92)Y5&anZ)d3ZU(hF2ocU}8H-s^UVs0!x|Si*%0aSSx_< zlf)-ra|^OMa9>lx#gS=**jm^VMyzviOxV~GHr~t}!D(N?x@Yos5xr+};vPq#J#4)e zm_GH)X*Jblj==JFJ-)c9INp$5-}R$LXd0pUisqbX5;}ztma{rs1n5S97*16-m_vTJ z@xsL-6Z*Dp>@6R7&^7c%^qasf0iRZiw<*Q_UB5%d_A*x!top68s>d(#$t*K1IZ%wjtbP5Fh3@Bc9Z!vMjh~1ka(K z9mn}i7s{MY?4qejJY!?ETT;TE)==k#B14C`+>dKB-9qM%OlC8b&gR7FSmt+tgu+9= z={dgZ#<^d`#Jvvj_cAj*r|+p}o*Xoqq$ky8E;x5%u%+4^aeiJquD88Z>wpn*js$PRiLOmMP0oIW?2 zZX3zgMH{I8K8d^ada)NH7TKEW564pHX2Ukj?HE-6)Cb6jKt{G>lRlbts1ZB!x4SaR z@j_doh1kUAzvld>q%{!F{59N15V4jb_0Nc$w4HmG?Tl@|D-MyN74w1ZcO}BO0?u~$ z8sJ^^Vc6PfYv6XQNHmrSfmlltOnT5Y&zrO8;`)9juGGr zAi)50=*AK_kV=HPbVn!LopfX9O8+PkG!TH%0|50zkd6}&o`{i75D=;X)Dr-OxTF!$ zbkdCkqBjo`PB#_CNJA9A>WSg%-Jq2&3K2Fi+{{z3_pS{z>Ei-Kkr(bm z6IQt|WgrC9v6!S{r)ucF%WmCOISG{UyWV_H=2yFsw#xBzgevR!aVjU`qkTxoT7`1w z-*ZHl$mF0jQB0(akUU+V{`TDuTucU2;zA}G9lro z(h1xGUV)p$kQcj5=oLG0_d<=k)Q4?lFGZD`-2K?!y%-caz*G=}t)}jPfKAnou!^iGPiACl(>m2sIqqY!W1+G-y9G ztU{vXWD;5A*g6E{{VYx3j1V4VU>doG-k5di>y+M(-3u|^y2N}~2W+|jaoRr<&{jzF_N*&e(1wncYtB%*Fcfqfod1DFx~|xn|0Qbk2&1=D z_*7QULEL|iuX%2ZK8|?{)0QWeoH2Q)isKQ-!a-Hu@#Lj=Irl7sG;$U0@7k)XSMD5_yWckmcEecyZAa@uoOwg<9G-}Z?vW#Z2GoA!{(W^wyv>126anzkmj9=x&2Jhp_dlb|2hTu$xoBvog6>H1m!5)lC3*8M# z3?Yb=Yu0Vp1_L0TW&kQVR9qpgn1^*lx3m>i7ZYxaZb=zCrpQppL346+1ZomY$HP33 zigjkSqzX7ijD3P86OC74dW?WnpO|yk*Z~vq$CFJFY&PtM4u;D!oTOu`RjLpjX!G2N zHw#)3eyASFnaMboX6S+C7%bz=YU4`UEN@mc|7|4KJdO!^6y6Ag5MDPndF5s)3gL|h zgvr4}2tiE&l5fG{KQKg~m_Y`x=cq|C&swp3 zzNuVC@W|MdTK8j_H#pWI#N)o7R?c^ZzX?|gBL~)ZQyKc=U2g_7-j4a}9GK9i^tU=H zyy2SnvHW^3+@Mtf+wNr75N12w_3i-fs?e%2P>+_@pzeP#8W}KnVg^l=yB4#@#d-}q z-CTn|+ZRp82Lm6k)+edtq-WItgEUw6L1Sv#yeB5*^#{+I*JO~_IImmhQ+xlD3?{P? zN1ytWM*#i7-(|PQdbz_{P}Vf4(e`4SG@sd3%qN0)GX&As-m-I@^sH&V=|pj^V5nxj zQ?rit*tPx(lO4=jI3P0(C0F94g~gGdwzGJwr|m2@PdI&sll*KlJ?usZc43;<@)2#u z@OECR$gK)R97KD$)8<7`qsCkN7h^9b4wC61dbZCw2ot|}*MLfR2|2DGM8K|`BqqqQ zgV|n2OrlYjbkWoW?JTYx)6Ruyj58Fj5P;g14Xo3PNes<=Qx0of3fapM}=xT8$mR4Av+~BvysD1*Audo7y5< zsN@$0B)EtmiDM%bb{J)QaK1*=q?-NDhcNc}Pw9Uc1dQE@Pr^Me4u1}bX5)7%er5c^ zkd0U1cNo7V@Vpp5(9G9;TPuu?l}^9%LRc_wpc`-cs7Ivy5@`KrM=pIiK61>wRE9>T z_l}7eZO;(n6^N12(DzJ)Zl5W1N95A~KVP1g2{SjxLVGZxBvzh@r;)F9# z!gS6$5$>1HgL}=3OCt=7KQt$G&wtP7v$0M%{#G|+`2fKBGW_=8hpnR4i=j|>3x0@d zQHIyz$1_V%CR)g|#i<;BtMTI#ai7PJen2I6al$D$=b0~1nH)aEoyz!gtyJIUQ(bGP zn2%?hPi?Z6K9BI@dk2SHYeV0Eta7a{^wNBVnB!s|EAXeYgx{1UhDzUQ%UtV~XVSbo zOY@s+Xzp8k3c}pDmFDJU7mm1=S0H@$a@rr5Py63C(*FJ9X?}AF&A%n9FGrFGU+mEODr*4M1 z&i-Y}wH`U1ArFiBvDJcSInB#Yr}^4CnqR78$bWA8&of->Q^?V`tjA6!f8M)-zB^8S z0`UF~l8SKPY>D-CN&P9w#eKrD+vhXn)q?FkVqPHTlSdMd-%B2D?QMqnMS(wcvgBHP zKPEWeJ;acELp0|JZ`*9zTh3(M2e#AxsPOZ@gp$n?X3lEj`ST+Bp1hjo0*UpQ@b>q@ z)l(KQ%ntGWm2lPW_(0yZh6J+YXy$I^TE=~g*geeD^6#_f=uqZ(2|DRg&MA3s1HP&+XNW zn?38aWt8BP(Bx36Aot5Jtun3*o^WiozSDmHng#HK?gJsyOYUED9@1VauD2{BmRVS@V90^ZM{nC`bwX3X z)W5#w=xxo`LX1n;rtDaH^tPRFZ4|$^tl7728*2Y~h=<#%PTaTdGPrh1$glVBTelIe z3&nNa33NRVEeo;y^gOzXSj%7vdw`|cI?MWz_`Uad`kiGxD6Y7;F0dXJS8nOPbvtn@ zRu__MwmvPcPg*PME(6tb*M$-9W@}3w^U$jN6@q3fF{%Ty8i|Y~N8WWrq#M=lg*VJ8y)IYi`0>#r0t?MNZ z-&q~WG{f~i@jGk1`h8I1W#QTgzYmFPgShUqJ}s^j;kw1T-}lWcz@eIcM zsr60Jg0eNPZ%fG6Z+>ho{cac6vFqr1)Vfbnzi`K6Ytd;~PmAA^%jowvsHWkxjto7v z7CM%?R&i~eOIOIab|U1>R=shhPN!=&Tr9t4NiS>sUL)}~)XfzvPsAAVOuE3AJI`Z! zFEXwJpk<@Ar|uk^C4KRl$JREZ@AA5LNyx>Z`b*YTbvFuS&mSRW<8@yY*P>N)y@M`b zd3-ZdIB5KGCq1_IGL+u8B;<$E4Eesg?@Gv1k6_3Tz(uNm+)1jxQkQq=y4ARb9O4Wk z-bVN>64!6xw-IG|jD);m9^>6oH|$)7kO$$S-wFx&DY!P(eYNg5aeYHv->5r9Tt^Eh zzF7x-DB{f#*LUj964%{J9$UN9`flAe2|0i1V{1QI_x-xPa9P$*q}=bRyITA%ME*8f z_tqT{*Yybb!Mc0vu5~U$(0=f2qxJK;8^!PEC!Mi!qxH+WZ@>@rb~9c7toxBe=~+5* z#>$(mHv2va`Hmy$H%D9;iL9V&k^LL-yD5Lh%J)QL%ztK z6(XJ2b>MSAxh*QR^4PbTOYUIBJrMBa+AFi zt}Dg0XDM9|*f)nLXN~r+mZL3q9u-$}8(k6SH{yzlU)=d~XfHx0PNQF=Qx~R$Bv$+i z7h*O!xDgcDJw0Nfb#8Lv;p^dd;SMms>VnIL>wW9#*X1;X!8GeQsHbkW<~g&%5JKxJ zaV<2in=rh+%<6%QA zaosbAu2pn_mhT|sMr)mM?M8ZZ%@Mx~hv+)R84%Y)81HPfPIHFE)w{$(53|u(Cay+w zU^}hTof9R6cbv%73(jVt^Cpa(Z-#4&gnX=vSk9pf9DD>r(T&#m&UxVkTwmT|S?zTt z=fZF+sK(}GxJHc&?5uJ99R3r2Bfv7@!b)F_>*`5B6uVXh%n{9-3D+$*uplvwATNXR$p z?tnRxrv2;bdzv=y{c`kXm`66#T+=|aUd#?LGh(g=otyX0MVLD4(mD6QJiLU|zPjTc zr1j{L#P)XBH}1W$k@VavA)W2_0={+oEeP}WO|<{x7>2wJ>DF0aJCoQR6!XPt+Fv2& z#$noz5&Hw{9)SImz*%PvZei};nIeXBBuAmSg!i3IGm~fPuZYlo+6xZB+;AFGIVwx@ zdF_PXyx=x8UGv3$joAB-CM3I^=0{Iu$WvB44D-$BJOcAA$kFD#p8;1l?>*%dnvV<+ zk8)siDLL?{nC-&nZ*QaTsF;6|kXsR}&U)1m#Q)9Xe+3G!tbYLJxgO1*#%Ve*=UGp0 z`VB(9fAgPVo+%hs3eJz5@OSurDfKi=_XO;0vo>dMZpvBtt+#-lze(x*Qp|_MykE># zaBTD5&qFpg?`;tKodQpb-4^q&0(nx*qXn`|%r`YWfLJGs`D;+SdGAAFE@-0tR}_CJVuro_!knAKudA`E$_gls^5H}8F=g!z#8&KJnN68F>5+v+y&{Wwh2 zkyB#LIlQCuHmKM}y2-<1y2wv0O)bYrJ_eo~=w_JtE9m?4*(}Gsc}mV&Ddl@ojC=A* znkoZY`k|8<{z#ZfYfpjZ#bUmza9dr{db60TAT3ENDduZ|EouGeq}%Y6_NNo~G=;36 z=3>nu>tjWljVP~>_4yO(K~LuVWmW+YdS-(EFx7oFJ9dQiI@DWR4 zuFb51d35GDgjv_J9_9m2U zbt%lhNKR+9lG>Mv{mGWg0RK(v>tTL9`4*TJ?`<%*Ca;0n2JUU#d#sdN@?2v6`ss}O z&vh6(TfYXkbJpFP{@&!eZ}3`IS>>zCA?q$L%yjYiT|mrumdhb9IDfpGEUOw$j{uCe6kUnm0H! zKO`7Nx03^#gb)8*L;Gu`RXI!AqQMX$KeTCfO1t`1@jW+3$WAeTEs(tU{zB}I*uO3I z--~^{^hYZsymb`gepMisWoW-$?6->jNwJ?IVg4cZ$HZ(E$WJBAUmV8j704!md{oQ_ zB;>gQ|2FJFIsWj-3y|OY*3vxDrTMz>1y$a@ZPSMU>GWy7>?%{h?;s-(=H# zXc5i%%V@q@%*(`gP|STt5x%*N=8osn{O4wxKWL&ElkjyG?HfFrZv?!~x@hgkVg4WP z-aO97>i_?Lo^ze+HLqDP^O}7OX0eWSjCE`yW8Y>hV=x%ZSV~cZP-ZNHC=`-)DwQln zQAi<6LPc3CB5P7nNGQMO^Lfr(UQ+K*pZDkc*U#^ntlM7_f!=b=&y&|Ef*uA}&#)Wa)wq8MJ!rmJ-$j&A}U4Wd5( zg@?w~sOIE4u@31mzFwZ?Yq?(VX7u?gUs-EI$aO30%Qd&5{R=#ISLn0@%@@kk2r#e$ zX?ZX67i`ux*Lfa%nCJJSeD%FJ;1d&1EQImc9@cNG(=HFR{S50NzUyaBTdYd@5^ct| zAblpBbW~;1wHc)2&>Rc7JYs~09mSZ>aTzCva=Cbf{5|+fCpHm#97APf9>;MhDeAkx z^t@Q?fdXFSPLn`2T&b86LKDv@{IEokCu9zSswBu+K=YZ zcys7)Xm00$ARNy>EJ!qr>XnqI*a|Y3ePX zV5#*OmQVQqaX#a`}jIyT+A{_H_@lHG#ps$mz(RV!Ai zpCFhVORLHl)|#k^P$!zM+2K4UEcGRGA2z44?nj&Syf%TPWqF+(&bkL@Ok6Fq9%5a{ zI-PYW>r<#Wb8$XrwxRscic3I#Z_3r~nx(NsuT_W-!j)A3tq|yIgVmSqf5P}P@?7j1%r-WUGxgZ!VYZpgC3=U=SJ8hM)MP)~*nT?OhXs*+ z?|>tygMvsOWOIw+WZvOE;#?OYJt|^uD@Kvd=~po*J@5HcD$x_QNasdY#S$IsL;56N zYpZx2^WDmXrBlrOB_KxRcUL9 zAlTo&YETe#s!itYY)(b9%e2(9F%2-4v#bkP+tj3zrg7d5b*KEC=}K{a#&KQ_q?qTk zevg`-cME$|dR|wo^Ypx}*uL1W1nEee#nSWM;hyHp_8)Pczhd)J_J4)V>)3t;`Yc+( zj%!8cr!idtzjBTB=}qR%T=OMyMN!n>bnTtMbzLl6?VW--56y0lda!vL)X!o%qMl{d zHQ5k*MS5OK)*7r8P!nNY_7M|9EcWLvL9wv4LKcR--ig|1yH`9PW>HR7u`WSP&r84> zz%^A&)u1p~k3PfT7-}r8R4MFI?i+e9cCjnXDFJMwcS(ADxDdP#SEOxt*Ga221<4^f zK?u^7g{VEtvGAcpldd$I_bOEUO40P3jBB0vsg+y)^!#(zpn^Fm5 z^LaPbOboa07k$Y7O}q+lr`&~fL^IN2Y<`>V*RvKMNNWaasr0-*aU{f35!O%m8rjU6 z&Niv6C2*{Zg@zfF=YOh`*<4ruQ_av!l$%QWTszV#HA$1}QJswILGl0Dj`WXqG$s^s zEp5is1&mE4`-j?*`O^xd7kI2_(~DYU8221qSKssXTfvuV<`&ma4)%niT78x0XexUm zl=9=+tF{qW4mY}Q#Jz1|9GwWopiLrZo6~LXweOtw6YhDF#8XfZl!WK9(@{66S*W+v zT-3h!U5z9>JX%WXvkcY8Mdm(k(lp;UP;;#}QCIl9gIb#Hd-;=Vf}|L>zy?%_egy9~ zi&nXLE#h&tv$zfE50RvkqT-#kP`6&A&}L^FQonAa*q-+Fhbz2^HfIw_S5_zO5JCDF z+c!;n(}^Lo{ARSD6+v2(%}=p8vjW*{Wb>Yqo1K`Cl;45&Ln@G#L~~I-eKSA6c`dKS z2l)0Cz5jCe{|IfO`jIY*{0PgXS9is5jTZ}l1d&ZG&&NTrFo{=3-s_))=l<0uF3@C{zpiPIWn8Ss56~sa&j|MN*q8T%tuTB3f>WAkd z$iM7NbHOuwtu?b~MtBB=4A`IbzwRuCe%G2 zR31hfnpd~Cs08aY`Pz+=@fWu58JbrkKvsiIhTdTMz)(_W^0`%$I93UtRDj(~I=yOe z)VNW4)#0`wO0Oo=DMvXw$LZCD`i3aIy3o)NrB@f47^3v*!ULK(y}HnbX_vbd`)qG0 zqlQ4A*@mv9Uk<7V6EuN8UN`k%l5soEZp#dv@4FM-b{P7(?-ryRCfuKWUHI#Ql=778 zUGP=AI-)*wF|-G%0Ssc&HQxw^Idna!5xmZn@BTI{8B$<}2{%1*utOq8ClCk?vLBTH~jQ0;aB58m&= zE7je#)lR$Twch6_i*Fzt8S-ZJkXq^mwVTGYLS|`iCu+9nR@$|zV zKvDU2!E;puWPf}zM-$a&f5@hXAg~7O)r{~AfJKJ>sPBS-aMe&|bD|aWlL^@69uS#~ z^q!%VdPJKHO|DGzfuZc$OT<9fWoShT(U*qaOF3)}gl{#$54Bt{2re0FS+Ber1UC$M z>KwKn#BUFC>fD+SL7<`6s!ouPKs3`1I94fH4uupZU7y3Cl|%UK1Ef2Yi>KZ_nRI;) zr|9vi6ABmYq9?zIc8P?zQl3!`m5VFy8RJmNxZ0laFi6Mgj>u~0$%8^eiAecylxc@( zpY?!e0^DGt^zex$2*Z1adcgbsa3S)M7d&7lFFX|UI! zM?BNvwxRc`WqF>3+O;W#dGH>_G7B0zG{7?(S~>KH=Xn^-Q~)U*ljS^^qseVyYrX() z84AM>k-h+XjnBPJlI46jZ`_LY9Rn|dq#Jg49YyyIL@I44r1ltm)}_9o*xG?extd^A zvnMHa2`@u7Q$F|($oDLR5qM9P zuAJ4m(>$+3MZ6bFK6mBL^1K0ynDU`)#aW(}aE70bI>%T4YPia@11VXqhE%*?jaQY} ziZjBSkjAtF{zxRsW10AX^h0Wg2AMqS}$$Fyq#U zX*84WgKJ;`(>%y)`GRK+taE6IXD!?@G#B08fruuQ-aMGwa*1ah1l-D0 z00DJh^SlS{6z#KX-Bq3qkj7L1uhwj%`Ea3BGSXzG0{6wb0dgZe zV~9q#jWE{`wckcqq6yYF3Xq%NHRBdon&?gA_7b~oFw~~*7W{QVmj@`l0%%kBZO{7< z*i5JXYbkuP5C$2#!?c5`0H{?yfap~A$=B@%P@Rd!i7n_>-=U43523q5A9=Pyo+db3 zp$%+<9Zd7!tK8k5ZE(g=<@nv6kHFoWQrHEZI)CQb4mAxmE)yVkKoh0{nB3z_&kpFT z$$h^0G0#pIY-mRO7}yCT4b6=YM4DuXuAE&k+feODyiW>C4bheJF|0D=gKi(gCPQ?M z?S_vHttuOcbjT20W1qlxhDM^>CvaI4#J4};*#ppmN>l)EcbozHAW)Nga=DB0Gbm+f zcDXa2&!DoQn{i{{b4W6Dr`i(nIiwhJS3hih4rzu~=On{^DAWYkn*ZS050_f%^nUK} zi{}eS#it)A^^PsJz!!LmQbZd)UqUaYc~H094bLGM=+GU{5g2XA)xtOUE2xCeWne7a z?%zP7LxK22Ua~{Ea2!&Z^i1+Cba348$yk`B38qKB?KuURZ79xsp7Bn@YleKfy5KZ? z%v9k1wM$^|Y51IJcEt2{QAiiG8|URT^lZyHb5pyY#wTAjQM;dpF`D2bY@;(U!MKgb zzH|njHZ-*ip2@-UhNy>}g@uNwhn$6FhNy>}gH?v8hn$1;hNz9s!v}__jn2c@hNz`4 zz!^i-(ifl^K9i00=?-liAisyUhW3|C#;@jeHZ-8->7ehSr=j6BC!o(9LzS>Z7h#B@ zI@s$j!bC$`!^gl6Fx}7|e4g|Nc-c@=lQD1!Rv2p1BoJwvA?oEn!ahUP%YTFj`r!%Y zlY0425MzjX`A<;K(8V?Z@@Ggf^jjMNKSOIn#o7kQ%aCp;s;z*_&_ffC1y>-)P*Tf{ zo+}W8KXszsn$&U&{0a$%a++_!w_Mb6Xrt#E%u6GmyMRW9-(Z;`8Z~}{1L@@UJpA0X zbnp$ZI%!&y9u<5WYB0@)V)e@-4P%-I66p@?GgPK5{u){wb*NsjEebkQEc4(*8t%Ns ziw>m+7Z=MN>KPm?+I1=NIVd<%WI8lFxRjXUP=0Wnc;2C>gUgE#4E>pw9$Z=MbEqf2 zG+;v&~Bt=VyU5V<=zZV z6`KtWELZ5$TtGLDg|D#|qB0X*?;cMJQP-jM!7W8IhdvB$Ee1HWGq|morioYL9mG6C zG*@*H%b4`4xuaNXh*r%V#X3W@YVIiBGeoQAj$(%)S~YhR2Mp1wxuZC)iN}yManTU1 zn$yH}L$qq{BxEL)Pw#;`i{gf8)tn)s4biTkn@BZ8yMk_FYj+B#SJXYkex?Fg-T(98 zp5mA$UU_7RbHoHP4-;8^b?rW#>w-tcRi<4)J>*g0?#CtK zJ=bI6!~R71Fc?>IkBb{j^Wc%Lr-C0Bc{$`Z4|;dK7(7~}9m>V$misg5Su{^P?6`S66U11DJ`A2HW-#r-Id!m@Eb0y5^dO~qGE5a`25Fkq z#)ag0kVs$CQ$>tJ9|lho4K=|R_3?aN^f&ZL{Qx;b3}ez)&J3}JN!RsEaof02tIQH1 z4^axcxK(C}bxiq?gL~##B6&zr>VZgUnt0ZpEiw(clagV!$Tk$6lq_e9!A`hq!Ow|j zyu!^DbG^dN6^p&X%@xZH^{;$8c%C?6=*_4lVxBl>==DsZpEO|`m4tcXPvh3BV=~Ma zu7`_qor@H&iF3U`R5nz+DTFK#NrtEl3q%7$RE7nD;wairFEm8^X**=GL*?R%g)DW5 z_S3K26KAmF;rMK203b+2AaP+IKqJ4j2 z$OebX#nlhlDEQ z{e*bZA^e?>C~znjz7?~W^c8-}iDhc7J@T|z;P?#0=i_%X&4Z_#_{g*3hM`4B=ft8% zDZP1cCF*y1Ud()qXcy!pjln1B=Q9<+n~{6u1>qh}ZUwLr>3fmGbWTuu7sWWHe3%rE zzi1O3MzBwAl^;Y7(=PUTNi1~St_A-njyNYOXFRt=XG00- zc3bo`R0rK|iwT;r4A+AH5X+f#UO-+jJ}ECkUN%H|5mFy;6}TxcQbvusn-?h?GR=d; zUe|;r%Z?_ud2loS8outguc4>=O%1W-Fo$M^_{a-}Hl!^G@s~MI=y2}-%R)-XZykCw z#3Qddv^6AB#?lYIL7$Dr$|_6++~;Fujv?yvadMF+?(^|-zai@L<)j)%u@u0d_&u_M ztYyeTswi^|UCjA1q>`Mg$=$2|v5?Agv7yK6e~a{*Chpf&D>|QbTq( z^l3u~tsw^*8r$C|G*J#UG^2kpq$!5NR7hw|Inz+Qib9%iXlS=&NRov`;kqTuB>9G+ zH_)w?Tx)1Iy48}K3{9yY8(Ld_WN1@HsV7whNOs<-s-9nqK4t-4CFw`<*nrFD2KT*3qn!7IaahW+;lkb4l zp`+yT0;1W_C~b4-Xt~DF)sjB)2}v$AD)!Ia9y-R0_Jof0qAx<9bZFy%?V)*Iv?nyb zh>B55PjrY{dZOIJ>CyV7ButXG9dbc|446Wx7r1}!KL#npkjM!{s$pmou3M+bdWOEN zmn^5qriNbVgzF{Q+R*Aw$#Saf!gNm1$UaRjH$JfFVFQj75c24YUt%2XOT`Y>646^@;9b=?q;zo0%poT4RwpX7&=qBp4KV!O8Pl; zmMr1W_0Z>JxS=wAZihZEV;xdq^JIddU48w-=F6H61%TOzMIK39jnEJJ7L5;ciP#@{o=8TuoNsJbEllF9NF*~w6LpJZ4j`x|$*@9}Wy*&x zX%)j($bQDHUc&&nQa)y=WkY-hO%@tTY7!t<$+FMtSO#`YhE;OBCh%7-q^X7q@s80d zIm`HLq=>E>>cJE^Q^(?8VTo8JFB=N4aM)TUC(qJuui}Z)YWa+zxA8=2wOnS1&cWW4 ztC%Lb=^X4$x!$@fms9dS4VQ}bmbceL48upHyW8BihcEUSyk)hsUTaYdo`Uu}XvreWy zr_(!tXX)$Y9Hxox!F5gtt(S`peT*k&>*aDoRd83gUcO@}g=xPgcp@wr-8Mf@apuFX z<&wkRl`uzB!?0Fi@5w1l1@13DFf*#LtC)FY>@?q4q$)TB3B#AO$(4) z<$6P-@aotqKQuHA-L}bHh8CjRHu zsAbF(NH;ZcAN)?%Tg*A*Tz@AUYT~kgC*4c#=K8E$#iVn6R(``&;4Z|}&&e}}He%}d ztI4GluE0$>J1^aaC}-zoSwl^+L>FWgLtU^$7i23^&(1HrhU@6+f6y!P?J;vH|27se2{hVi9;FkD*4QZ z!g>MnwtU!7aPL>cZp)cW`rhuJav76eYy2tSacEW89r=kS_XeD+gmu6WJw+p|V}|G{ z8ex6sgnK7UT33u)WXh&6%lh5W&A6>d;x#UVJ2`h3lCPo5*hZEWWa#OVON3=b8iMF# zu&h|7iBP|-3#p!=3Muvttgnq*CESyEtP9!=uZ}>Z zL9cV!k-iTLwnjK~IV{8qSYG7j@q}3s4&4X~w{|em3eW|S)@>$z$34=j@&Oqqw=*!4N8W`Si@H8@^xttA0BJfTczo;Id2pqZU~M&Y0M8C9TYC-B zuC=oDr6Jn2R<^#;1OpSAg;%k%-_^Mun9v^IMgE9GE~suTGBi7ZXwZAw=Mtu2hJ1VC zdtI#kO!?3zp-XrTD`$iDxhS${c%rr6p`7qqR?NmCw?L?4b#Q0~)U{?fG$g#fwa=ju z;SH>^n~K7X4{vNua%gqv1J(|QriVAPV&2z2zvv$b&8?nH`H+sQ$`;lL_?h9r@HX116>U5#JypqB7J3eXRF?J9ZNy_yWttuRYT(vw}S@;0!8;3%}2U-!kwA&Hv<%6xQhEj9ShCgVj-P-My0cXR9SZfTm&-^+35o`A+ z+U+fLd(`T&N7Jpw9?x)VyhAP+VJ$aQ*pCPwX~2K^aJVB;zv!PSzn27OKj-ge}D@EkI_V$(CTPg{R*3bgud8}YQ`MsZGeh~m6U6z5%{IA=IMDb8oCfTL6| z=X@!j&sZT$RN78R4IO$XY^K$MX%|p>v#b$@D7{%$#4(Cx7f^b$tU-n-z1h|xLzLcg z)>O}pK>*2{)yw>#HbX^3{o^Q?Ca(JpzOwb>BugkP|B7^0o<3)X&3T!#79QRCL3 z`w}tVI%%jMo=D8MzBg16-Cne=7;1oSFIqP>aV!fg`8AbD_p=378HYTcg;q69Jl`&| z>KLN=c9GSDN#C(uY_&5)cWf71-3=}1O*Fs|-LYM44L3x0Y!_R3hUkv%V(VE$bfGv%@6NcYYox-u)*4AC;{h(jn*kcG(T*zZX0^H-Lmlat*NH~ z{}sS1?Z!oHwtmrst?BW6XqEns-H<*E-eR@YbZB}PPw94CNWf}SfPoh4u@|b2r zO36tPA6bRk4RQzU3fpcSJxg)sV|p&wZp}HTX+mzY+-}93=k$Q?Wbd%rULe}#?iz>B z&{-LVsNHv1vo!JZ&^xU6net(F++cM3*wDz5gT=?zK|?*THTPI)7dcM8>-?#;jwv6e zpxb_H#U*mnZTqG5C6m6w4_aS4gm>VqOHBGS^pG|2M+&FUTMt=V4bge)VQauoAV6z!mlhw3hnLYG{b=qo20Y4bgq{Ggfa+ zZd%u!u?85Tb=?_js3BTap0!39qE+QtD~~B3Zeia&XRR!>jOiyez{;BG!#*8 zb?En2%r81;kKyj+qP6O}Ch8MESoLla<>T{?hpiv14NS9PV2Rlgm#iDcEwTCP(4VY& zx5%fy`~S0bn<*c9_sS5zSeduA8$E?_&02Ry6Fm!X&DzhT+xD7O1%J(h?cjFdN%u9Y zg`r?P>Aq%-H1rUU5GdX1L|m#SoFL~o)*O+0?OR8vD#gD%y{_@tiYQV$t=1IKHZ z8eJ5w_ZFnd4rK@*wZahfIzM&R5cN8L^`oJ-{Z>Tyt6PSCO;{TdpxpF2E*!IdO&BbS zsUMW4ru}jEsctxwA%awlO>Vk1L)1DZs+ad7Ley4=K8y%ewOmDU?urOk>kR$SJ3~aO zT0YwCB$g;zr5bA5AD_TdXADt&mQh38+Gjy4qNg-*?UqsV3{mZtQA-TP_S+XxM!jaJ z8kV+iPb zl^UceC2ChhoVseLZtqxc5|2Ifl|Y z;O~J|S$wjTTICCTx+p zh)7a3OOelc@LQ#$5w+D2rrB__%<+gis?g9?q`GPwlfDA#sn71ABMv3YdMcu{PMun; zzM8?54{har&8gKbnq6&>!is`zVAm14-<8~4m=lA+-^=d@D-eNg{wQx|_t zrpjq@-@%i%G*!d6eOMLW(yR&%z25bNCrvf1ro;W*OpIXlNHcrO->2GDIt~UaFiST9NfqO_?UaEi7$s)y2?2bnB}o8Hy_%9obKvH}or> zu?$d`nee_7esO33e%p(4rhhS}9y7$h7*mfM;$MuZ35IBWHc-tp#J?C*iwx1ae4tvc ziJzn#q}CbY--xNLhUi51A+^sCt;8QvM-9J3A*f*+=~FzNm|T!X3?89M)Y3JdQYS!;RN;nt;raYXRmM;> zyHzmsOdoQqZiv>cBUN2P{c*e)sZun-=e-jmN2w8p=(l>KRa9+G4-#9gjTo&eIy6{3 zp_Useg)cuJrz+ObJ{MvwjaTCgox$D2c=e2-uDF{Rua+8Wg1d?FYMmx`l}3q?kjEq_&BiqVkz0!AU$vnW|S{&zh?KFho6TssdaO(8`~B)>LH~qMkKXl`up-YpRMiL_KS& zs;G(ADAQDJL$t@6rkWa}el}gTH$;76hU#vJo|&Dga+!3`nx$qKH|m44l}gs7oq=P} z9F@(K51HN8z+AP#xMg)a;hC?7HPAjgM0Jc@phEDzJB>YqGBd;?HNwyf_8;O=A)JBf^jQI zA1qd?Z<^fA=bI`ZMH8)_-c+Ay;#{v)N160f$7@xWrsR{JIvy0cPVHyXPmXO+N161M zxEwxNsoTg1I8 zvpI#!hm*KI+pD5mXsXFH*3h`h(pOYO5=i3rbLm2PNf>Z#Cus;8k^ff1g4 zD#uV686ZDZg@&r)3G1ioQfnOx#1QRhujwsJ{Zlm`*N>F5g+4^HI%;~FsVv^TC$|!A za*IgU)YO+~lA%A@XGkaQR)gL03~fU{pQ>+}aIftj75tg{!BF>RM86pt)||-dOtH*{ z8f}RJ4MlW(Eb=o|tP8p6+2W9jaOlI}!zu!=Eov3|-RDu&ib>DmM^&03>Ssq)cP8D> zj;Sm|)X$EoK8C2D9aBRLQ9nDTo-joH?3gMrME&fTdQKD1sb8rjhNx$KqgEKAIrX@D z*AVrk<7$T?>UAeo#SAKgo;OdcHB7oMolybZ$Sohznz`VNs@9!r!Y%O$qBE)wxO~3_kvn&s7c@n&-ZGBp;_s8dY}&U*WoTk6J0j6y4M<{A-US^bh9<^ zlUiq}r?m#Is6hPU2<3W1FBe=@?ng8=z+7Kd%MAU3xxT70hibP!0>6m3s`fpq>3zHc zuB)`iG%dlrTvrW75Y2|~!lQz(t5$~2bjpvst}2ewZe=@6kG!dJ3}smJBJZf#OnMxY z_EM&Eg60QlFW2O|rz$=LY_BtJui(mB+J8E<1uQ#eG^KD(yppguQrT;m^hj&lo0)V9 zw!O#rq!euXOHG`DZ67BR6bruJ%yvIf6esTV?RbY4NBY<)OnB;-kRjam(@1Wt&(zcm z;cpkRn@+vB{Wg(!9)x^7vbg;*yXm|H+J~5QX#?%=G;v-6?JFEk=OxgN8gn-)1`_CDJ~~^gJZTt&WVe2aVM^+t+VhWJ!CCp|_FB*!bZD z%=K)j*6hQ`cpIx0|LwA=&Jv2K7`2K+Hr1IoZGp-~KGAJ)WEF>A%H11T)uGDqdn2nk z^iuAD$m%x!3- z#4q*YKYEu!xwvm5>pE02?qX!}J>eQSZV7Q$A{#kWF7EfpCJxaP1mp+ zX?#&Et3xyFMw<93jBa*wL#^<{x|{uwq21ASqPp3`4W*YG1KsSghUl(IH+!NXx@*$S zo?(dYnq=B@4AEVaOnb4Ro_If}yZx%6p?J@xyS+ve(A~Kn_CZa!w!tqs*cTnz0zK{D zO}I9A|2@kVd0Zkl?N_qwAVVQNccNP*O}uB$vL9f|hgaipziIa}^eEG4rg`p9x;Ko< zvI}%LOuboDFMAQwIo~@y+dyx7r6wMGdfV#^HN@xZdfVSP;qVuK_76;Y#_MDMq>1N; zKK3o+Ml)U?+nrBk*yX0#u#fF;h~~dOb_qi?|Mjt>4blA9$Bx&;=la=pc|)|$>Tf3) zqS-Llu40I0ya9GYChB!QTayNvkg&AjI`$%qM8_KzhH>o+%nQ$V2JLB zjlAdjDyRzuX!X4sF*5?$G8n`J2h&CeZ2S%2$GDcV6~<877=$^L~#l#@C!$kof*&vWelm z{WmrWKCJQgv4!=c_#aNE_{oog9c9SpU+d)F8u+X0|I|ZtssBv=`#hXaA$#qIN-CjB zle;$em)H1AB0t_ebN_ukGa{2>J5-8%{(vcjM!2|`d9-plS+L5;azi|cK4bs<9go9Cz~vQ(}(G%J{k<|6;v&-@&+A(ikW_xZ2ekXhG;wiy{uHab7ua>*RtA``MZC=f>%1M}bnlvr+C_)edGqdvFW=V> zb=ZEK^MA_i|HWSCME5;iWA~Ru*V{k!79E2gXLLUQ8ykgRsi2yqI+0KcuVsrzFa;yg zY~wpB|8K6iH}s01YSrSgQQZ^sU+wMxQ>X>lfBv~F|H-u|x74zd>*3zq{%`H6TzW>J zx9*dCWWqs{?YthwocVzP(ABwJ~ z|81^x>NJ8CjRW`Ra172k5>BI9_!fQgd9MwvC6W>Y18sa;JGuVnt60xpr1&jI?uYlM zIE%+~(jq@P=KFo>{Oi#}mt9{qo1-YVAMzaJZT}dL{MwHnr>c{+1&M`*wr?!Iv(#D z@HXq%?uIRzdA(#q{ibg+eUme$(5{lv4PtOqo{%WHj z7Oz5w}^NAf8eST_a=O; z=@hliqRO-uJ%D}EW>fH|qUf5{ za{={mT)Xo6T(8*o@cK==(!RB*SL^j8se}afugxtn2Fuv!wJvFqAKmUDIe~#iYw7!Y zg1*ZBsuJGr@z-87A9thD?Ci))-_0Q#G8gUm?%LoC)&8y@ZN8fduHL&9l}?*2*ns6# zW(VXwSKgoJ`)yXI{WZ7u`}xl{h0Q63r^D{5_OEwjI_JT>6CYLK-=_87wc39klXWY2 zuWerOnqlvE)uqt(zh&QTssCIX|K2~PUepIDS2$wu-k)L+p!0Uqm(1I_Zpkd+SI3Nd zJ@%=U)~Eu!RfjFlaq2ZWl|u3eTy%9%>qr>nb!wq!!v}E07QAyT8V|kK64!B@EZQUA zHUHfTM7N`Njp_cNQ_*v=9%t_EwWS%CbXZ!~73G2QU$pO7U#ZAkl+Pd7wF}n?sl>0( zP^-1T(M{5i-+Pu1Ht#oU6x;NAaA&g7iLQf7eEvi)?6Y z!LMKO-1k?r1r&p~tF}=lPJR9Au-dFgCml-H$-lqGb?MHN3Ds%n( zQ@w5KKsE3tss$5qbi(h8dD%RS>j7o14)0w3lUdjN6N=*0Di-DkSs39a`?STr)|QBlw1+Wb+;zxvee;=L2prO+dW-Vgp$ZFrYd zm)E=3>6uj9-=FjQZM;*Vy1jp;@xNbh==_sPn29SoT!Zmh9O=C+qJ7dxi(kO(Q=~%wM7YPp9HKW?gojhw&WBJBEKU>vS#b z&jPwfQHp`s!!4MCyB-A<>isACx7l@BX$qzD@S~oI>QE@M#}g7>5m8GOmBPE!|Hj^X zm7;6@dMAoatG4mJYP|aZow(jx{~vnwil*Ht9%`w3{do7}A9=>q=Nn|U@ce{Ad8gvt z4|P2haM`KfN*Gfb*9TztkXWAsxE}6sTk9D9&Df={Q0?D4t-JfpqTQ%>-tKVDbq(t? zUR{$qhxgm)_`S!XvYbzS{zI|dTXvoLzb}RH$@A3xrO>X=;|fjpCCl_5%B?hJeZ}eg z>nq5+MBeRqyfL*=0I&B*CAM;4pk?l7X`53x;#qtRdi(sl{&0V8?>$wcwEk+N{?!TF ze>a!uy1GACx}QAOjPkRoE9o)55`V!fTH;sCsJsO@v+L7i8`fhjx!^FW55!d`|959+ zY3`uuv`pJ^JpcJ#)&03LVY%HYZxX)YvGEh0*XZrFI=2$E&0+Sl19NV{GkhH#5ESa9 zBpY42c6jAVXo+e8y~!EB>&JfHMnCvXE-aCRiK*mD)EGhyh@Ct z(#2H!-`O9;y0YOk))jt5%c9nQ4Ob(7S2{hj>y@^?SEbL}@3;5f6KVf?M?iNNt^Wrn zu|u%;N(dN8`P4D%Re?6^6O6n20_+=q*>~K#*U(|=MKS{*4rw4yGW5$^B*|7L{m8c(S&#gWP~GwJ>D+;8(wSEYAb==sijocycJ-`xd% ziPs*hJ5zpY;@Uvr_tdD2bOqt}yYWm$!eO3;7qE@i1U{=tuj~(9@jGPQ@#|w<@qc$H zfqzTj-%$Kt9X3D>{9g~&KvVqgLMjA^=J>w_{%?iu9pM`O$1gKMis%ffqAR3{EcDw8 z|Brx^;&J>x6913Icf(EwKbQ)~;92nC|7-ZaIQ}Q@4!%Ioiv*$KTVYWBpb}~zB(m0L z#aAAqO>5S4*6yr*QC;u^YAC$K&+tYH@=00}wxQyAA=|9QZxmttY!f6y+9knSLC>N@ z!=0YZ(M-?$trhfyR9X14ZCCi7-|!NNK3y=FQ^|KU5TAIVXVyuFKvS9CZ3MKI^cGw) zKLzO+3ctgHY0ZGX^4-4A;Wv3Go_w}{iOtj4yb;Z7(3QU0HCXDem5|R$GADft+S7Y_ zK0!ZwV73fyavuG-`~L_pa;{!-QY{zkuxi-#P^-~$Gs;$kvFQX#GKq2@R^{p2jY9lNSn%;rN2e{SEJ90Q}TAL zYp7?UeB>$F7~gE$RMOkAn#z}x0@3Cies%s7#yJ8*y;3Iv&A;Qj>nd?5lf2IaqE<-G-&;)OnA5iN6uiR4%~$$6Cd5A4U6snuk$Wb~%CZrLVNs2(W%DNV8Q*z{pm+|WIi%g!n4dP) zA{B+Do13=H(9pGR5$BNIgYAL!pWt{B)ma^NixgFL-{r5>KJ)z@N5zA_iI~r?eJQtFum{pJmQ*u0eVfX?ZD?eE zvf){*=YX2^{3da(CUJfyaegLo9%gVJuy0~Ni4_;|m;JHA6&oOF+;-usJgFw7O)ork@V#!URW8Ta!yti2H{0*d23qg|*0;9IOX ze$6wpm>XxI7f@qh5o%d@3AGixhT0BRqNbs}ALPR762;+hc(;TbM#CDkAIJXlU_F{A z!6wwHumyDn>_D9bpPb371UwkSJV;W z8tQ2A8@d*X-%*!|KT(&nu3}xox=vWd-LOHpQ8$ZXs9Oc)d*t0xHN#s7h8wb<3)# z0kS%3piD#!kx8f#vNme8tcw~W>!X&H4Nxn}M#YOm71;!}hHO*Z58t=l9rJuf_CviO z2clk*l>f_e2%4`-D)kLX?Q+3-6m66miRxD5GeD8g5Vna>j+&`fqh_hMQM1*1s5xpg z>L9fZbr{DsLQ&0+<~)p3l-oQ-H9tvFTTfNgA7&`(1G5yh`y90k{m)l>Q5UKGsDN52e>T>lh>MC^xbq(t}^*x$5ux@6Xt?DPV*`a<#-K}n*?ql7r{y_6V&cjjGZ`jXC z)-y_C@4di!iEHUH>s3Yl@P_h1*W0XM2cTK8y6qq|2e1aRO$cj*9ftPNtTA>;G?!(q zXvd(r3Tq9!9GYvf*0U4P+>kZZrgm&)Q#-b^sU6d7x?VEbK8x+M**=Hu2iepghS=3H zhG90<_6WNcnn&Bz?&EA~_dJ`f;z@RWw4Z8IADCe`M)NG2dcqvL8Jg$Y)H;joR%kA? z+oLYCJE1POsfYY%Q|nye_`A3$hnX(QVK$p{*gVKZxgFx7+zxY5u12^hS993UeD+i5 zqBfo5(+%zC`(&XO`cMv+`A}@j*?yG|#lOaf^1qJlH~3I&o7rY7yY687-9D7(eLmDi z`+fRiYzKX)#gF<7C?Vmh&lR-4!TxWve{fR{m798?+fDHYxF5n$fo{rkh@0vm!cBcF z+C2=-F>F(oZ7Q-&6*rZrhWl~UTJABZ_1xo8Q{0s2R5z8P6{nKJHiOt^2-^&EQ`z^s zsV5(FPr^_~-IUvJ+*Hpe-Bgw{ZmRzaZmR!FZn`e&`BKaceJSP?U&?=~FXgtCFV#sq zU&>D!4%iaXeW|=%e5v&_eW`R=zEro_zSR0TzSR1IeBJ1CHv3%VOL8*N}eoBgO1Tm7gMJJ`=|KPtsO4!hrv@;}6XG3qe?mr+OfQ@f1z zr&PxIQ#^V8+@Jkd7W0MZ0P0Ki0;u+;29Tc_0hE(j0hG#|07_*M+ZVF^GPJj0RRE3i zYXWFaSrA_1Rg7}wE=IWuC`P%;DMsxwh;4=xqx=tJKO>6$Sxn+AOLaciGqQLE z+?6K8R>Pfemy*>W7Y^cMOTBiY~LBR8T5pK#hc+S zcVO}UZ0>K&{o&J?ZHir8!{KVoM4yT1C)Q0ir+ueGL~M*7nPXW~SPP4h%~saz;=`dt z^fc6@*g`hPmtfZt!=Zol=@JxMd?0Cm*1VwMFg1F65c$at9u7;R3sHAO=YMLdXqV6j566%j-wxNc_#8w&(jbmOy9U5~Ab#Y8~0>vDYM0rkOJz1a3 zkW6}t^<)FKX~;ILCm$FN6G}ld(iqe?OQo=8qaH7n#|o*K&(clPC{*80q)mI0=4X?_ zI3;osT#Hvs=Whkpa{FaAaoD&pTc_!p1WU@rc}$KdhT z{CI+je_z1ABk=Eh{5u-|zKDNu$qEZ_jkyR4;Z;}xo8TZEg_|Jo3we)g5{idcpOcYqM*&>#XaxE8M4yPg$Ru zK23Z^`8?;~Tw zz7f8$z7>4y_&(@6%y*RU>%JR(xB7nUd(QWoFZj9qLj6kmmGi6Wm*m&Nud82AzkYtt z`n~A4)Nh&JI=}b*w)^e#JK?ANgZxANOZmt9SMg8sZ|L9Kf4Kix|Ec~*{4e>t0*VKe z3aA^baBS^Js0mS!grizB+-tOhIOu{d8MxQz3FUCVmF9nze3cviT?bci7Lh^cT_3DOOLvrD#4KMxna5BJ)4Rwz@U>c`%YR zwI1oT%A`H(EJMARLK?+3F@2Y#xm<11x$VhM%Sg)MnzCdQ#pda3{;@jeoMYDJ&h5zN zr@D9TLrRm`uf;0VcI7Ar9h;6v$EjnRTW&47j)^BfXA>zuYjY^|-@3eqs>A+VhGO%M zLHpEUBO8N?42LWL9tck@Y`A z`{^Ahh9^r?sn?e}i27T@uTa9;;TfZXL*dgwRx+knIQwjZOeI&U$ znsuG)`qwo-fZMbQ>-{}{NpH%D_jsa57@gk$_M^k9>(=UAkMA${5j727B1*s6!^71tILs^a=WLN&Z!C-LrJFs?lkQ6;V( zLQ!ksYJ=7(k!W8BRpL2+Nz_y*h1wFzptgco)Yg~_32iVP+)+aX^xp|p;;Nw%Y7buT z^u*L8t{tkQ_QG`Vmz}5*&pngS{3I&=J`z(CkcTSqeq3ENPe7HpR;`cb$*2+vaMvbb z3a(}(o{%;{orWtK2~Xpi27jrJD;fz4Fn1DHH?2|Mz@44MRc?E9U5P4rg@aEVU{3LA zP3VmFTTvx!!xfK!k5DD9e!8KV);|(gK;6+yYaj_9;|fT?Zd8e@p7X>6zzY4N74KF5GaMUZfhLi9Mj6(ZgQSsCU@0tp{6Z-_3ufte0|As1Y z4MuOo{T)@}`hGl`Z=p)KjkPP_4^)Y3w25fGgGvu^Oh&Un#a@JKGXdpLvFG6WOhN@Q z9krr(2DOryiJE|KTfx;VD)tlcJZfDr7qz~40ks+4s}y)I`9(B07Yk8ah{dQa#ZuH( z;w9A9;uZAM230~Q@hWN;@jB`-yq}4`#TP5l^)Xb5r`W4e9~bl<-;t;iMv1kkqs2R@ zPl)xXW5s)@Pl}DGPl@+Y$BPfpe;%sDb8Y-83~WS|ut{t~^ZTe0PrA3G`2$q!6#~B_ z16xofd?Y?b^LA8xYFm7Q=AEc`2VU$&^AS`DUyD!C{0%Dp`cQn1<`by+EFs=&6>t(2 zpCuPxqWL>i>YJF*=CQBdG2GUmuXoxDIk@QD%V^j%EWHB_Sph~>gQv%Ho zpkj}bL1<1z#U3St(cA(Rdz1`Cb1PKrQ8FC0jf_N_wx|-?$&zSpkBYw=lci8Q$}*^F zcvlw3D;ba4RhC0P8K@Gv$qJ~MvJz@vSsCs7p-Sj4tD-pvRYI<;j^+WV5(dgdG!H_R zcuzkG%@3kVcu3Yp^AJ=CBk>bR_)H?+-xe?y75k@bfadY267pmt)Jd`l+Dt~pQBF2R z^AuDZ*fn4Tm2hv@~vALWbn z%!M?2#qP%m)9z#GHxmA2`b~sCm0l$L>2!hcf0Zs0ev+@d^LuU<{zAG0=HI0+ z6aGee6a0T9 zgJAwKVcLB-^S=RqA0cun^TWVDO2}AbeuVJHGd~LECkXlNlgy73ej@WR!hf6jDZ-!6 ze4OwXGCxE3TbZ9F{O!#DPWU^SPw>>|2$2a*KSy}H>E{VgH2pimlTE)w*wOUw32$op z6yd3+UnRVy>DLKg-t->{?`irB;k`}2NqDyDw*1aJ8w0aIL8=&0Hfywl^Io+-o{Xc$HsKPqQC( zn$&j_rrozU-Awo$O}7v}-*hYCdzx-1{LZF3$n#!8B!ANx;Exf)^G$aV{#4W5gg@PM z58=m~UQPI~n(igf&k(}-{2n{WHxaHkFA~0`xsbla zolV_=r|0{d6@JaJS7TW`({=}ExIW3tKHutoq5T2EUu=Jn@R!>kBK(#19>V|7-beUr z?E~&^_f_r@e2hQh+A_0EC!1f_{9N-N9sAcUms-EJwc7e{``g-owf#@p|Dyf=<8M6v z#XB;5uk1^Nr!p7r%1S8+10BYb&go$%Joy9jT~e1P!w z%x$mCxL0J>3Gc|fi}23OM+whly6?)kS7y5J&A7WVO?x^em;C#Xoh^-VA3O1BPKL6g z#E$(suD?Yu-imGeHm_1&XY>Z-avG!UB6Y*SB+h2iNml@8SARuJ>}ikLv}lzsKd=%NW=Haq0zZ zix=3L-Q>5+9%*iG`9kWaTJQm?(KB=X-Q8|+ac;Y?U0TjotA*W(a%p>hcdIy8dan3z zPq&-RUtH{41Xw8V)QT$r*U8>{z1040w^Glqy%9vB=NAIfJ31_txJW5azTLp`~n zfqd`a$Uu)9&UTL&Vt8mYpU?LX^^cAX^bd~=j*zdfC*Pax>l+vt9nAOjj`sJBjb_J& zbKO0oJ%b~|BjefO9=BH9UYxs-?QvuI+{{>hac+KQHb1sFnV;@)(>og*g{6(+n|s_u zzPz(ptcF;wvawNI-Y!+jq~)I}mbWhy$}1bis=eEA_ao9`|gIo3EC(Hi~1#T2D{!bw|sovYqW>uDaaU>#}MB_xZ}g zM0p!vw06F@?ZNTkv7zC?o}t0+-0*NNH_+2RJ~-GtGLRkb&gRGZhw{16Z1-Sac5HNT zV7z~*r*|Mf);%#0fyG6# zmW)h=>h7EIH?Q})Qm=bUFGQMKFI2ab`K&>2C~Zxamd=iH?{$}o)f%+*k!P<*fj&2$ z>xI<@as%0X?@0g9*l>6E&`5tiH#RUnG|-#R5BClCbPx6Adh-Kg-D7lkd@S4D-#tFi z-!s(RJKpEcZ5Dm2=c~n{8r{d&{Z{(i>*p%f?LPNxpBwG%8yo21k>2jyX#Z$-I1B6a z4~-9J`@8c)14Frf@PjZY8He)Y*`91}aI6oajr723J^gOBSSwbaDXv_+d6rWo}zQO5Ek-T8sRewWKn z&rO^M7%Q%BFeQP;E7j#9TL1pol><}ixYD& zYW3*k=d2>J8THNP`rWxwd8PQQ=$Gj4W9o0edp3dcBp7h&W`49MKh!_c-Q6=VHrAc( zg?>GwUYJOBjQ5T8W=BT*hI)r3E(Uu>NBajxnZRTDfdMzro6Yw0kByFJ$NGi`aybY& zln08jMuK|Kom*yFOcu*)+v{o}h+MVEAWOy9+mBq!O zNTLt95ya%^Fbp~bU-sm(W6bq|f!xUGV9)qSzHg{6pYI-m*Se8=J$(b+BZIlV?vdX9 z-u}M9!M^Tcb)l!18*`kSG)7O)Vo%?&8|>*B%pw6sv%Mqv@xh)vB4WIIU}$hKixh!_ z2gdrwsCb+Tvia_@(cBm_WxS_*5UD#t0oNu+Z+HK2LedRhFYnN>XX^R!;i%KYZewHE z4I{S4Mtcxp<71=4y~CqDeZBC~5X~ML?;RLMZ$OFRVYpx<*V{WfG~6=`UyZ;NeIxzZ zk*Kf{cW$b(va?Zq#GSiXEjBUfm&$UFS4*(KIznk`Zd7%S9;`D$ggQrEZmhR&xEBRD zHUa?{u%28#KRSZGMj4Zk@9l#p2F7T`DDx`UGcYnX%E+O$$3_PFb1pkHIMR=l%4PdU z`^QFl#z(t*yYs`N1B2uAWn`qUyLWhGbU2TE8XQLM@npWccW@v#G%}c_MCTdz!c;cr z&hvkIVR3#cdwv4&4HFj^J(!!Bx;VQyzA&A0;}>$XIafnn7FW=0OECJ1Fw0)c9mLhs z{S%`bmF3IH>~+LaNI5V{IZwhsF?DzphU)Lj^^E2FMtk!^!{gn({fM9O-oc)MzQH`a z&-itZ^b8L54R!Zr^Mj+gq2BI3%%9wN@0gpKm|mQmnRzUGA)g&{qxre{#kq_5{21@| zPfyHU0BA5Yh>cHX=Y!o5qGQJG^M$pEF(>)$p$nDT_S|l5ySNE@-DEaEewxCkvr~ET zqbNK%GkxCTquIGSa_(Ywme};n;%s($Y?0XfVis$Mx*L(BM{|#$NRJ0Jv}_pJDl(9>mN7c z426o(J-3Yn-^|a9yY)itLTOu2d1`*#K@SwU22nRgX?mKz2}Z?_O`M;Y&rU|MkYPSQ zbx|-vNH<13H#0pCG?pJ-IDekU-Nf8teK;%Y(`OqUKN{-B=;UKb9-f?-w)otWQvtMlZZe;poyyKV=HMW^KW-uPfMoEa#pq3b z_EL!X7EQ^*w^U;pgGOOH18BhX4CPL$4cXkJ=3;hXlGOYZ9lMmDbd1^}tr?xMJeq4$ zWSF?*<1>?ED!@%n%;#sblZ(>}Q;yQ1iGgDi$O7Ra0g$`!*jyaDurNM8m7Qi-kd8d! z&QFZ#w%~7SxnVW24Icnf<|jN(9IrHAvLMD}ZenIypz*!6h6Y>`=HhIAeBz0amb;Lh zn3gCoah#vib9E9VaVFD}h^P{#-7J!4F&b7q4k5=U#%G)tT4yI_5bcHK%NO1J=;Wde zqxhdGDE`-t2hN8()P=B$F%vA$6Z28p6S_xa^b zT{BZt`RRFee5G=w1{5^ecy?}{o~UJ^q|gb&sig)?!eq#diQEi1&(G#jMIk2s7@wF0 zpWQB0OTIwH$tc8ad|r`p*5~K97hH91Y2p%NQf7gU;dZIsl)1^7$La3lPG%aj{0S$a z1t|??o(53uG2G1D6ZL_gLK7^GJ}I8C*)y4a!;@~czRFs3cvEbxwCJ8GZ0r;l7hS2A z+o&M!1&x(zTOMAiLtE9#vgw0GOq%jG)@3cff?3A{m^iXFLv(3(yI7kqqU=f2GHmx! zVWR|m#R#4+M~`4`DxIKOxN@;jt6iy7iEP!Ooh`X+#JF>n9ae~oa^cirpNj1ZzEEXl z@eHesO0}>?oF(3PX#-%j9!?iFiDQ6lk*B)rqe?DY!fNT+;tExnhiK7lmdc6%6rS|} zon9?fH^+(_#WhPo9w|5wi-QC)*T0p-Ve0XKh+8V}6tR-arSh7}@V!S5TYMWA7PcUnNTm5JwIEuxvL~e9-gG;4tT0d$eQR}yM1MJBpLd;xYp1=j(aR8+8 zW1#7?uQtFdI0KephTVW5qh(sQ)o6ZmYkPMr%2O)VJewMTjWbo));e{KXO-mn3;@?e zcAG(1!f8bm<2D&Bm6tbmL~WJ!Yz$N3%EgM1^0jeiP_#%0yf#xd@w~iUPl-!Sq#;Y> z8iB`_FRFbrtE;lET@6lZKrokBerP^Il41-;lQi_l{9H7uTCG$g*iTPZ>Q$BNZ>8Eo zxuiAyJYyYZa42I!ZWHEIwX}J$T4V+-y357gkeb)bABQ~{22bEPRLh@N%%>2^k&gLbQg?zMz zGg{cNT69YzZV-OeWgM)~)S~B$+jd7D*d507fNH0$hJ+*RPKT+pxWb4^rWG_;cBd4p z&?1W~O4=zux4K7F6tauAMb~rwo@7 z)VU1=J`r=7;taNeb=MH;UfEdD&Cf$Yn+hWO3RJIkU*^g#SE}XNQf=9dS1X&E!gBd9 zY%k+kPR9J|KBTFz$wF=092H5VWn)q&amtuomNHCYb34^)vAjK1D5HT^=GQgvCssJU zwz0TaVq2qB*r+2_-T7)|XNwH#Wq=WEg`JJ<5M7J1C_6sUYLq(yqs&nZg|76A7pGQm z?OAnVNl(l|+29#?&Hy9~dT`s|(aOrM0UMRd<${*xZo9%fa1-8}YQ9;;CM4isAHcli zo4{I;AUTRr_ZfOPmNYeeqBafzYKbU3kA%D2xa+@w(#7aU%CfWwV4`wxn8|q!4 zIuZ#EVyIhh3`Ja7Z_SD}8FCd^VHxuWQbCCI*-Ax`xvh=T_Um^H_H@a~U?4?2Fi{J! zeA!f{J&q_3T70Uwywo^3JX8qJ8&Ugd@HpXQsOw@duYPB+b^qj#_-CX8D8G8qsDO$x`WWF8F)?kwyPM)ZFTgEJkL&@I0!BCZtcT@LL z8S6+u-G+6Gg<@?MjQSys3#YjSvsgoHIl@k1BO-mOSaxb~w!AWjAa-5{z~8`#UK3Q0 zDWVeRiWq|R!W((OOU8qo;f&PvQ9Z;L=823fLQh;Lwdk3xPH?OI$f2-Wk4{KQl5hFmP zPU^_GkU9#5SckWw)dtPn+9)g+S&MCtvzs=zr3lL(x&h$T#Y8!ZE-q`Euvne0C~+cE zc+#KVR%b~n=lgO36Y`X5mlN11TO)EME{E1cC3=&|lp#E%W@25~GG03%VM#B19bPO% z3w^C(rV7uB`2^a14a#ZpWW#EJ)T04P@|;}9C!$^tTgsv>d<-;cYmkYtil1H{QQBHB zRt+3mR*jPus-@+X#M~HzNl3NYYsJX!wC17XLUc1^iPVv$2Y7U+w6QYJ=vg7GVr}pY z;Wc|mnqaQXPnb`@*OER zkqJ@N6VWPFI#f*=WleYhMW-$wKur}lvF;Bb3k{2L8;U86C6yW(ej&OUp(U%>ZN;ou zFOO4GH&mF7A7^i2n^ocQu;%DMmq5gE@m<0mC+$Por*74g|pyM+A{YeX>h$b5rje5RO zM4caqTNHoDWdpqQG1(ieS~OF%;I5E zje87G$4xO?EYjHqE3Znh2n4J*#CIZ~y`5Fh7&R=U&SQVp(T28DqsYam5O z185}r#*7Q`PEKnUX3(|=^bC^OkRok>5wnIpXxX-SD_XkY>rnwCIWqZ09L zQ9+`PSyc2EnL&sG?Ma7aRW)Bm@)q&W+RcxMtd($zLmr|yB2hI~AwL#T(V-TW@QSkR z!lz6eL9$cSxjrrCI0%5OH_@Z}wT@GDtLyl>H&vYsDDyzh`WQ?5^=fQmFx-L*4U zS}PZ}mD${LTKU8%OgwY3#u%L_+Ai8U@o^+coX~KZXsonW+QxfYFFO<@p%!Bi$%FmT zgKD;4;l}BzEIPgvBO5A;(aEytw6(K>=Q#9^SyhN#LopsjI-Vg87BN$Uw;zV9MZ=c#)D*r4t7Xuxk%z}tu$QVI#h2YunG>LG` zfX&i&6v-~J%8uY2Th&Et02tRc0%n5WKkNu#OEv5exG5H>NEtkG(Vjt=TR1+RpOAHC&#Vyn?Hz?vxHTLp5w#C6ely7G&+!V>D-JXKhX9P>joRwqSE< zV|Tu^okUN_495mdikkSLnWb7qJ&Q5(<`*BYqVpt!;sjr3v3j9I^UEgvOo>LU0N!!)Jdd9laDy?QWP*((S` z*6k9DWj7E7^A&?tgo${0U_B5Sj6NbeWM%#E@J057-4JR>dSmTHsO12#2qWCrf`OBOHFA|+B^^W*t}%NntM z-X+l5?+jVg$BD$wU)Y{>TI@pHP2H49JAT%A18BN70jgs;>X0(C%GU&yht^Vs zi@i68lKcjdgtpHv)8HU(v0}SOaVC{1K9QR!@!SE_a$^oX#ib4W)>fmQfI;iE2biJ_XR8f^Jc|cAfT6dh*EfNU6a0RWWsgXgz%0di%_2zB zudd$f#sL*rE_7sraRB~2hIoA^$tsgpG2n6Aq&Lud=J%zoZ7`_e(Yy6@xDv0tMMe5V z6s1%339$>#$vr9NGRL2|f4Qd6b`ob+y_*#-WtOVj#8+LhvP$iGXQ5J^+FoV;P!Xv< zvw)RF2;(*^q-Wmsgm!1A&PXiFQ&QGCQIBi~ERzTeo&8>I7%3Zq#qNvj?*#+L@7<6q zDDmpWVp&f)ZRF{`zyaS-lfCUyH^%8uf#1{R!lh0b4RP53CyZrDf4ngh_E9-83J#y*G!2p?9jM};C z4U5lTsjRZE~+mQodDA2kYFtw3>FEsTV#=1 zGExm#CZVNn=~-EOc$slRatb7hO-3=56%t~Q+Kd;AkSuyg`)5(a9H`;>N+qD##*Gg3 z(|l7>azTcC6mAMOiZ52tP)S5}hZ87PSGBkmL50Zr(=0DmBP2r~L2A1^I92)HBHZ$U zxY4R`B}#>BBM9jfK^wkSWkfE~ZR5pC8TR%m+QK;kjaaQ|{pT=3tJ@w_AydrKb+&4D z*$egXddXFm-r~0!B?Ei9yD#h1MIFx8cFW7T$ZzXd@RX>Mcz-rFQvcN})mV=DQS{zI!*N#kBWZ(~HHy7v3GQI@%%UKAI(vIrxOx2?*Tbv7! z@2fhGSA3?Le|m?EU??i^Z!!S9$qBr46Z#VuI9V z7?Wcw-lmJnqswSwNd?c+9r4pjK*qF148vTAZS2C90OH8i$)|(XvkDa93_-vko}^l3HU0k z;(4T5anqX*oJ%q0!wsNCyiXjq1MqkR!5`!1 z+1Gcutxc@ADis;8)y1JreYhe>Rwu~6D6ijE#YQY4Aq z>6KwPN1|RLzP5{3xi~9Ah5#8oLS#7rerGthZkd&3zJk!4DC1U)?wT4ngx%b7q3lL0 zIElD7O3qt^L(xG;-GDpAE-MkjxlxC2dMFy%YFioTVsh+3%sy((MK}rrJ{G z5E-v@WBV-ccz2c?i=4nE7UXq~GyfJxdgZhAuqXnM^dC4Qr#h zB4;T#O3(T7U;|b%@U^|p9Ts%BG}Vh^@Km z(L^umIINO7Y(ke^Zhz+4P0Ylw>WE{0mabI`TkECe7(KJ}7M8)0p~7n&p&(9k)!+Fn zHsb5&f#Td={4SJh;V4<0WM(_!duEmG+cj;-M@`LE*Z2{EvPAo#wCH@81Y7(-cr#w^ zmIT%$zD+*XgfU(#n)yma%dZ$2>eO!;#Mp&0OlYU;%+mFpiIbzo)R`nskvfZG=(0Ex zJ>)$zF}hUdxOp56?TIny*EmwF6YE-rPppW-&jiqVb-AvfWTmc_a48o}SR@ksR)kzR z%-l_wl1Cw-rZESHYanbDzzooGbosLUfh@e-W97<~GWOGDyH}^@E9WcJvb8&3vCTMn zy8W)4e>+prhUsG&n1pN$A!AA1EUe%fHn8q;{t+euM3$w9cJ{{#D|*@3^Q9kPR816}B{c#gZ3cp;Y$=g^ zB!Wjdpf1ixCP{)vdyr1DH5n&wJf>}l&^5{rwbShZ7#Mm;Z2L|aH{ zLc$-K_k{*LUWo`?_c>>$&wHL{?mUCHgk{z{03qk?|cR7N!%!+jYqIJVMi>2wE(9X%|05`Hi`5w6Y(*01l-u1LLS}*29Y6`(Y~e~2YxE#R z?^1bHePxB&!;uTfy112yh`Y=vv6uvkrYB;_1M>OAZ~N#x{(9Zy zqL*rxUtP&!M$NfebQh5tPDh)i*@!76Pfy2(o)K^q6uAkcFI-q53TdJOA8G`kEj-50 zIGdczIA&G^u8MMIfI10@1jy1%4z>t`ZqTgarz^JCBh-XC6~QY(07vmvUnC-c_GuE2 z>vVn1jV?2hbg;K;IKY&zQks_dDn?dR2R0y@rrsDiztf$x$1IWZ)@2by$0aZz(lWd8qA`e zki3CW+LFah&TuACaI}4J#A`TbLpIFv=y?6vXbJTQuj=40w%?DsMj?rZ4`ha4jed#e z{h>fsjT{e(&JU(zL(4U-eI{1;cFH=(nroKR7QX)7fSSGG6yR*J#%$w} z#+8u76!WMWsU=?sFCJ{{27As7MN~}9*zOuhg=;+Fw;!|_z~dH~^buN)^E^7d9MXJ} z=|T_sgVr8qWes0=7>4t}g(XfkaL}Nh#RL9q2P%)VdDOgYq28&$`8vY8cTXyWr) zr;#oil>@JSTCcB>q~R9_s|0OR2Dn_ASq-p;FIOlde7v!tyf7!iCX%lqBgneo54d7f zI8%FJTjw(L^o6B5KhZBc)?9-Vm!C0{flfy#Nc>o_xHYq3XNPON&6kK6R~>kjRlnb1 zJ6n{Y_W4J`aVd{6?~mlNt>-;1>W;CaByr8j$E}lc!Bj)?a1@1A3k}^VdxJb;wfYOQ zHU^T_GPYE3{eX(+ylW((4~}|5PN(ohq9C^AI7gX4hz_(rfsy=e#3&EMJdmdmQ;7Q^ zuFy+psN&*^xo@m%^)ulfMHQlzkIb$v^J7E9V^}56L?|^u=ep{-gUigE|8;D`mOvew z$fKnk^FDeh)aTGzqMp|S>`wT1y6liwZ5^HG6ZE`?G=KP67jprKhy70y#2D-jWTN(G zqbxvTNxw@_X8~zuKlYQnD8FGM`2a3DFyM2I>-dw+LJ#?hH_);^zKEGX29ya^z_~Sd z$jD(~4s%N7`;(z&`P7kdEErfZCZ3Tpmh2I6gS^9R_OfwQUXxkj+jkg?O?@b%mx8vx zsJU$3QRXpDLAGeUtP1eCNBS2Rx7SNG9DmEzO0BZGjhjv{h!r+=YoM(yC48i)Erp6B zZ0d%boiM}){{7aCgyJO@TIBTCZEj0?|6y(wOkaCIq4}p>r1G)B0nfr zi@cw8B_m_)>}+ujYa`(#tnuTM((f~?{wyDAw*ExI`aq_q zYv!FAWn1rajD^e5N)3{ovDE~%U#HzHH57QOEcbMTTD z>GJqsm_@O$aELMZ+TsYOx&28DbkU0GKhjtRP!3u_p5A&~zf@X}NZR?)3E3lel8FS^ z+>p@C-?^^q)XX-ufH zGGB=X$VCY;!h5%MpaT9jAEgbI8QVrs!yQm|p45rlKBw7Aj6+nA0nzL9*%~y|o+9td zd)N}Bt>dIPrr!IB!nqz^cZp#9AfyCyJ0aKVt0|@^!jZ`>dr;?vSho7Oiu6Y@jqm}K zcIE7be%Hg!k42zzV<4J{3t11NluK&%V77y}CG)RD<>+8IFFiuT2x0!12*z`RKPHMO z<8DasO`PXU!!9pFYO6%M54_(9BjTN1#E`{HT)jM5;yk_6;>$xD7Dsk#yPb(jAiG5L z@f#1-NI1BOtj^6qEf#e+YwU(7mIZE$vdKIr9lU7rpo}u1bf08neOq$D1K#atI0Kc) zQHmAzIk(y95v$OH&^kWa$$c?~y-qeW%u35i z{ytQT+JBuQg0DbRBboKwBfX1@vRXyB!pchh=t|^tGwBTZb#VIVw3%`+?iwC3cE~T3 zDAu!qhs{+lq%}gXavQWzuEIX{YdDTW1njg#zXx4^4?M=eX7 z?C`G#RhMbOpgqcn}8nKy8~6l@FbQoJP)-f0g!r)en7-Pd;*dh zTWpkWH!2*;rx-L5u1*e^E|$^IjW@bNo=E zj-u_sx9Rif0S*cxL(Pw4fDNyW4fQC6VbtMIJCPQls8T5r<--YHv?k^}ihCNH%3dTe zAd&{M#HG@rx8yCVUT_>Y{`n@8XN?#w2kM#Y{&r4Q`$cz*Sq_IUqcsKHHlvDamt{(+ zdi+!uc{!RNMADetzS~j6cRq?-!Tja9XvDSGcg=MR z)}icUx3n~YEPvLjjRcXn(IX=XN>3x-&oK?6ek){uia(GaJuhIlbq+^XLok%X_We4PKik~pq9br>YZ zsM1EvqRt@386rPuSWJ0EK+6XE^GChc>eG)-GHrJFRoM7f6yjQ?J))yXF;cC^R;)KA zGE%hL7b9Z>r4et&Nh8WHAL2*P*U#F;xRrWsQSJOIUws*cIW?QQ1BMAv_Q`PLInj^w^56J!V$@wpX1R=#c0sn@3WOK2C9Q!aioi`EhrLgs=)z}TXw%$k>DXvEC9o7dI@(^}`5 zIL>V`o%Y)(Jh#g?dt7dUZ(ed_h3{B*@wFXH7{0Dp;ERb}d~2}+euHoEbdjfGIhIK6 z0>e90V02&Mn>yDnqePiqe3!9ISm4?Lsu6DSuR>khRzerwx>jtHJbYRG(QB7iIjW!{@iuQ?A5bxxa;l`w{fw4D+SSP4cDQ$H9ozG=tP$ zxBEDu*k+BCqjLCx5F=<}i154CS24IIM42xEt7nZ;Eo;oJ= zP~%Kj?~=^y=j|106-AMTbE;dh8ecaS?4_#uaq!tN5j2rC5^ANFB7SUEY^*60`iC-M z%JU24J4z#jJetn@b{Qo$PR}GoDQ7{<&HK32?zuv7KkAKrzDUb7dBWt31~UhE&jYpk#&CqphTHA770s;yzPyfQ3Pw`>*FWn*+a zF3UX>!$(_GqIzP~A5z&#O>ofGl|<9Xs8&Yrq3cU^84IF>*B#`4qvxtosJY5N@y%Hb z4=?kRI`BcBd}(b-Egn^Na)t(zpbK*+l%AY9*Y9g;??+x*1xeC-b$5mC2Js_dFLrA* zbMH09^j27-iwUA>r^$D4ng+`&Swn2+cvD^_^`P8fvXfFrf!yw-()rN_h|UsX@7G^i zr;?*7ZT;e%P>0opWVPb`(7dBMDx%0}l!OTuOXzfC3y$ixbUNLB)Af5Mt_ytm(z(H{ zUBC3$vimF6b26#F-AOUhyite2YYQ^cwMll$K6J;uc`FU#GFTBQ*OMddpwu{u!u2)T zV^h?^&nv@zD)VT$BkAMqSmpQ{tD_5+lU&w)#0|;HY*Ty8nroY;RLKo@v!8WIDd0{f zCxW{-NL5K0@j;Rbnx}rv=8lUVS@IxT_^8bF^yUp&C{r(9#!IkE^4BjdmQAr%Kf-Ey zkv7Gp+>i}&zg7qby#ZZlwHa0;nu}q+$~%y>r}doXo~>^OE<}((<2D4q}WRmw}$y3 z0+yIkrKn8bo$zGi1d#Eh!O(ztog$;Q%u4vE$$rR0m}wNo!2pst3=2rVY|-MP(JVW1 zV2{U7y1jR(VNX+#x9h@MFEmt*ZX{H^W)ok^mI|{z%yVy%931b1iZ02osncrs9J0vs z>?SMN2{7IUKB(z^r+9OiLEWg!r-r8=m?3rh#-6_=sc`2Yp(Ly06OEFXVdbUP#%ej1 zXZt`mKzh7JU+Xlr&}&9n zC4Nn3^ggZiU&(w{dXjm3*FkG%3jDK?Pn>oik*-?3&z$rOejR)Zp7xTT?pE=rdLFk< zy4BsAw7G(omJOv!#93ae^~iyO`zH3`A$}Xq~Nx#s*hS}hY@xs<@bAQ zWEHpv4{}1VFpeCz*B;C*+Q>7ju~iEK$H^KxFy?npgYmYs?_Z#Kuz6gM`lFfSWw@k> zbg1_l$QG|)qdiL>124JkwWPo5(JYk>AJ3R0EX#){plEU?_)Q0yIR{V& zywC0TQG%8`O5aFoNOui$7Y}%!@*v(;N~y%Xl4K1MSC)WgSiFnn_hANIKTl~Sl2SLR z_u>{F$w_O;a(vy%TCP>H#yUA3UVD3QtE8QmWEwry&wQ+J;3WGOcDdxuR;_hf-t7An zkHw3Z&{(6pS28D_A);Tfq`KJRkPp94e*DZ+&W&6mFTYAf8xG0W8#I1KAIn&005!PvW`hZjol< zry0TVks)Bk-RY#=H38n;>=y+ZnR>1VUs7N05oJ`r*TH($OOklbxknpitT^7cxv_s< zpK3=sl;(Tk9t<)R_}&&R8WdI>lAnH;#v zJrIw+Hit@3sb0ojGynOc^B-)# zx2Yu2{Oa9y;r7OSmgT!xh7KMQo}EW)@*=ua8ZmXMK6X+Zr#1rT<2ot zD{E#T*BT?4}N?;DbbaNu@n5 zG0~`GlFG_YTCt+qqRFh%k5YpNRKw0C^2eryU-C89)wv63gpTY=OOR`Crj!jk?slX5tm@o|le3o6*pvniut9CW|Ly!5NIPc-iZ_ z5t~demcLQ-`={NawjMdqY)mEY4+{PuKZ}^!Ia#xuGB*#hj|^C;hlV~a1Ac?4){rQvMWp??5lht+t1r*Op>}P? zsI>=G(!rCt?vBHLr@-uPDAzE4nxuX;7HUy@y$Pm~5#7vRd4ICMu@FhB?a15kn1qz~ zNGhLfo_dG-?!~@eGbMKwwf^Eq*v;VZ zlejKmcK#;ot=C%no2*q_w#=!SqsP_r*b$@qkk*_BmpS5{ctu}h#5|X?(-p1oydOrh zAn?8BhF7%ly!EqR*0#(d-F1>nv)C;hwO=d4WXon)(vz>*-M9?%p4NDON&Br5v#v+I zIh_AG{Tb2|ja<{Hc0&IejU)GHlFnhoAEJLTt^8v18Y|q1qxvr@ivnuzLCKjsS(Nn0 zrydQm;GiUF>{U|AYt<0y(N147EuO&#mEhr-=pG%VB%P4umqr`(fn=s+TQJ$A8+@-M zFM@x|-61MogVP>u^udUlN!lLV$&`WD;05ZtR=<)9-(c=|9ps9VbxDIPnfIUpb(kK0 z#E*6__*218h)YKf)*^YB)SmI`v{6^OT++#LusvgpgE%PO4>_tm?oHE-eHWvp5vpPI zNc(CGwC~~1QODk^V2EB%pC!k|y*lKavvJl^|L}Zt$GhMf|2B*3IY^DeEo*FrKi3&+ z)uU%<;Jn85zcjF0_{&g0+#A>FHF-nN?|!jXahmz;54dh1zwe_ri;F@3H!#*#oIsJSP9bFk0cqPJ&{w#kx4^3l2{ zSXr`|!YOsNS(aMAd(1SA^oy_au!HO<-j3ysI7apW{kisP^ciaW8+W%nuV33yd6vGs zxYNwH?LPL!SpG#+JS^M1V}j8u=Ib=S7WV`@BR+c;EV_7q{ravpmpv$@lE<|kGOiSN z#vFX`n3l`WAQ{3T-!At+#OvWH$qHEx;&(5Hjyj3t9#lKx6H9WXNeaetN7R$exWb7Q zch?+acC;mBJH46LGAp~>IovgRuPDVCPk-jHM5*3#2y;|3)N6gt-8DbNO4Z%u`7TH@ zH{$2rjLqbu-fReGIlP37Tk2jrPanknaz6RBV&KiN+6&wp=5~5ejgL_CR5Uxh?zP{wM+LFIL@VSXC;5+riMQr_L+1wb$ulglr6bIg)~DDIx5 z7@VLLM;HM1%2)DunHP^oly=%LY~lknIxZH3(^3A}=U|mBQzEf2jzvWIo^|fSKO~AbzKY`2 zk{0YJvAf2&H%^!2DN#41>DOrRAGM4bH>D`S=0&TUnxR(pTdfHP7{f@02^qw4a31(q z$~;eMs*6{xl@B#~V2?Vw>rMag0<5Rh;Ws&_C{JVNkC`;~%{??ho7EOyisykX`XF4a z{?ux@Jlq4<$}a<6ipY!GkoTZiYOGx|FDiE=OZlo(!b^RPk0^(2sKW;lC9YD4s%NNK zYQ){UaA4$O@g&aCJFJ??u1_kfLLKU(fAKnui;Ryj1`XoP78*&eIm;%$Ki;U``cjfy zQ}5ex@q_YU?ywoFgO-73WN=6ViFUEj*8C9<7$4l9G_fQ}l2lUtfl{tVeGrBHC?plJ zHwF)#FYZe!EYbZ2o*7Eka(xB06tzdn%k90pk)a#KaFFQnfoW|8Cnv-~aV&i%a(I@J zDALr6MUkwPxP(<=VssJPTkr^i#R-U&9MTKql0NntXWnua?fjEi+k0r1DM2=khUnll z(MCc%nOs)FH71u@sv-3PBDpeF9`&Sg(s8cz?r=WuTKd!7KSi7U#A~$A;v?r`zco&B zsD@;3!y705-P^`gFGA&?jD^{wF7?K-17%#RU4fZiLfMZVev`G4M>KXpj5hYwCd$l> zw{4DIyy#o7PrkJBUc&n(kKcI7v$Rv3JqqV)o%z>Afl%&s%fq9TwEU7Y&fOI_Q*-FB zUFYmve*?Fjk#Ih2zW6%a4Zq7fNg1(XY80GDaK$~-7-m-a=rP<%lxz=IP9{H=DvseFp`7@XY$z=GVw->)reY$tdUhWqkEs^9^JD z;)smApiIJ?3v(r*HY36{v@9GI+)EG%SNNq^KipjKYL^4CfiiO zSn}$OaC-D}sd+H3UixRD!cNmza)D3}Ti(FH^iei)Zb9zb>)3u(i_p}zo=kkNSeuDlm#V2(SCoZFQ$=Ful??oyfs>+ zv9I>9e{WSU(Is_yqgTw^YDY-)5lQsqoAmO(AC!b%FG!BZc9y$8XKe`bQIgSH0p63O z{`ooRPTtMw=WtxaMN2U)i$aN#N9vEBc?MYLv1K2cC32Te(gmK#k+uR}cW<1#d%|K# zCCJ7-BF`OK^2+8sB2C91^l0daM2J>4YJiBLxNnq9LoZ6ygoEa)-dtCQJyU4-v`*CI zy!JDP*ZitY;=%2`{d&z>j_AgMr%5Ew#q}xY-0<6e;Lp4F-*DmWA6xs1r#@Ktcdn@` zm1^Zh?o>0t>C=jK7&y}0l}>e}TW{&y`*^Bz?_C1^G}U?awqs=J+;8TY^f7RMkxDmp zxtsMe_?^V}Q>k=Ym$QVMU2~V~-23%oDycKu!mTrZdZO8-J32bZ-_h(+9cMaPS~6$a z&NR1Lg&l2As3_eU}>)chZPwy{Kp~~w@cP{9WW|k-WZ=%VaPjf%he5|F3%3AfLvbA?Lx9ZLX z%7ZPpww?hJnm?atpn{f`CQGoE+<7N7YHw}HbY9fI3}6J+l=(Q=GFraSlE)4BHo z7&3ObR%LBXAImUS>5kL;I}G6Iz0VwTaKH;ZLaBS-Z7u8&r=;7vnnd)ycekb?1$VkB zlC|E}aps0u zUFr->*pgDi^#~mMeek7m><_9QF(h63XJXr%-OVYhJKfpUZbN&9hNMrm@(*^;kWB~} zAx&BQZ|gcHKIKnCKaOmL`hf4yyrV{7ti?^-KoV z>PoAM)-GTHVtNKO-P*1|g^)a515y}gTh;Qy!$(w}I7c49^ikZ~HZTU$<^Y3^KC z2b$YSYwuj?XziTrfW^}{yHhu(AW=JYx3`~uD^sSmb6u3CFD)6mMRlEfdlvp}rM5D5 zx18QTlWL}&sWUgb*4CR_ZtC3swWuM{t-Ym1wY9d{G;Gu4S1+4sI@O(cMN5X!FsXC! z-rk-Hs5U0X-uJ?g&l~h%L9JrY_jT@lqX8cPIN6d84q1&L=eTu+ew7w=}0M$KEGyYH7}#QR{w|c>>WS0RdrUc%J|9u_s>i#+X-~08>eWwTaUAqS41%S>hh|_yt zItkr`DIr1-|4!6oruqA4=r*8W;b*~ zf@xr0W#jsS!RMH0?WgyCue0>ZmXn?P-KVdffYST?|22u{c7XNH{WmiwT3+5+N~a~B z^w-uNNe&3v+Cj5mjZ^7cTUuJr7&V{>goMkl-p2n(n6^d}>gsLn%nxSDpT>ND^)`l_ zSpX{|fA-fkGh1(VCylzobe-P&+{u<>X-n>s(6VlPL|qk`X@ca&@s?w>otD!+lFl?E z3(*_xbtKgw$Qaj~sqPfxRqEXTaOeIfAp-vquOLcLTKIKjutB9(YHn|DYfB^NxOKD~ zqr`Q~(|)G8ujQup_B5DtL=yczef3l##si6%1b!*a=z(s3sO3In;PKq;2`c+WTZo~@6UeqkAj46hC#ct_9H*@nd zmgdvfIw|4m_IC2pYiMdzV3-lcva3+mrY_psAarNH2rofIE;366Ne-C~$V9`tkC0RO zdYW<5^BJ+OM)pke9W8Xn(*en#&R8DZ)+3(Tcc$>)-P(?ZivB1gomO4PT5s~U9EBZ2 z<6x%IFs5ZRN7D?Ie}+lo=Qf?8!rx7`-`a9BwpJ)IzRONMood$Y6Wkyr{geT-e+&AD z{u+ykIGy|dhlQU^pHaOT{-{s4Oy-p>x1B*V!*Irsp?EJjM9a*}T26~q6Mr;cTneW7 zL<=k%{-#?-DJ#VM{fydv=GYn4C0G@OKbw@tTJ`U!zn8V#6r<0azIslv+go0yo0Xa@ zOA`lCK|`^c)d>1XP=7#Ov8VL3|6^R*5V_55Vw$#=V`l(NnKw1-uO)*B_7(|j-UQ!c z#@gL-M?-Q)%ga5a(hvNdZjs7MqA?t4C@i`Ees6bN9d7;P*WLW(pMUT(uOHRoDePP( zT}^&Hcq2caJbmpV;x%~}tFasV?c_(UU7TO4d$*Vt)(2h7av(IdvsP<5rQj6`(h7bL z5;T4HT?AY#+!VZ7!JYyVT~nI^E%cgF3SMVX9&UP>L7YQLVPvP$sZ7&~Fs%xnS8zhX zF$Ld6km^qLqRBdpOz-?1;fG zh}63Go$sR{%KK)unAW%^G(CYDW(ggNE-6@6kYdZdDXk!*fFB=Y9j4$W1*a6G*$!&z zQgF9|)H=bJzf7PKn;gAqauBVF`UzgAV2_|r#q--XuIWJqY~H)3S1Pzo!OIm~d@R#M z(9%lK-A%x%_Tpp5jwxs%Xl_<;tO+6EnpzYbS8!6nO$tsc=u~jCf-m#e^uy}vor-?F zg0!Mv25dSe=+E9ppaE%mrK0B)eBkd8y;YfK$1Sx>Mg8WNQ%$MX)G3XY{iVBEdt(fp zY2#|n9P2D`o#R^IdOCe94VqP)QZ90BaBXp|BNzQDhx87vOw%!}ECoN9KGsf-C%B#> zzW;kdzFW|*VUq5D5q!2yPn%V)#P=!qfP(K;@L>fXwJc^rEBX@(-Y=8(QwqLBbpKfe z=Tzn&3leVcR}_3&!AF$ua|Bnr1<{Jrdw-zdiwgdnVE@mhLysL#A8R9a6*?T#y-81h zLFxA?cn#5g=zMyA80czi^D&tzp>yK zvMA|%Q{*c-cX|_}HBw%Bm>g;BB@BM8@wC=Vb!j@pkPN*E}iQOp3s$3_HM$qas3k6L0rx1^w>$YaldRlhB6}_$nKI?xOu-H0n zPL3M96z>+IbG@U@Tvu`gAWu_xf_x)c(5X(c+d^5cBrVp3CjCBZx1Izg(0Ml7CZ*PY&PAI22=I+#5xreh11 zV5h~Xu*emp%AFmZuJr(>ok34y3d`N|DL?dfL(CZNOCI+nBFGyf*xpAh@@XIWv}OC8 z&-OV*u6A4GYPZ&MSk`h4GFt%JK*;b`$Bso%+BzoBnh4Pm;e9N9JbIvW@B3kS+36iO zv0T)m_m7c=l$k!=)uxhSL^>J?ycf*7eWxfl&2Ps1Jzy0Bt6Q2$tGg`*;9>?@{y!AH z!_j+;r8Fdko4B>$?i8mA$sHt9fe0vO3DXhAqMNO-92|vf!wB|leAK>ELWY;PLAPYYQZs|_#wkK`7BL15Igrzpu{Aa=yq#!x7M}3xD(=Uu|2m_ zVq4mzn5b}0#q7U^(8KiEirjw8IM;PlgQX zQ|+hPeaYuYJgze6>DAj#Y5KQtwQ(JXpWEddq$>4_2UHDEtD{jxfMWtmkijuXmJE~G z7!31}a;w|u+o&=ijm_Q{e4J5Q5x=9Jj{#55e$o;;M`+cnpl~k|1DIaY`tEKS`OM`NU zyS-eK^zA@~`Q?PqWa1L{0L10G@Cy9#U>v zh6>bRJQcMTwIkQ`JHiA&B)vl#^eVc8U3%6&!skC~c0{hw zjES0kBrIE9UN1f4Kb{^J^_3}iw>86mcFIaTqO5yU?kf`6eCv+LcTdWlQ9gCu$QU{t zYGlp#K+1ik^6&vIK4S;bYkY&6wX)k+`r@n! z`j?9_`tg*Ty#_~}rNIqfiw_^b9NR7X&zwJS&VNMAzFav~fZpZeBP)xGLpC#RSIZhc zN*GsrU&`H+NQN$z@>=vYQ$8mhXAFa?FPCljTJ=#mW0X1*F$%9#Y4$B?KKNTLZSf7- z#ys_b*T=lBT~rvX_-&?&wkUE(WuAlfF% z>qWl)h(rqfz+5TvJKU-4v};pFn+w?|X%Zkaqb*1(cqGhAB^x!g|8GmYy zuXJuPW|O6*>Ed?(Koap3Uts4E(-TjXi`#rV(R32(<*92)f~}P$H+Lc1J22>?HoW3j zqBhXaJOA*^7yiY!zW=A6`VW7+x$)EVCH(z{;I0sByniy0j|1F>J zcy?uj-;w3-%de)4Q(X_sW9s<5;B&nF^|ye;3mF`2&6ut&DC9Oi{B_)&-~(VC?k4DW z+I2$Vm$_Tq%iXQ+Hg~&wg}cMu>CUkHxXXQ&dzAC@ymRx-k<$$?qyE(TCaz|#V_b3t zDu*1eYJpfpPC@wu@E4vB&tyo|rFwOV-ht+U?t%7!{$UKlIA|>7*4Cx|>r(qQF7njsPtU3xJ*#r{ ztm@ITs#njd9eP%6lh0ahO?E(K1iFO#9ynd1QJ|B`Q{FDFWIiiUi9)`}U!YUC2YQ8j zpj)`B*yI)H81A9E%M|d7Tyj)PaC{F1baOq(^?7iEr2Tj9zfSyDfPWtN-;i&S`0sQ7 zU2y*m+z%7~58OXP{Efgfr2T8)O|D0{CP@2M?!UqHYpRFqhq$mm+!wi)dFGeN^KHN% zCeLTNYp#^R{}S*6+`o@_k^A?MzRdNbx)bl={#VeaGT_Ln!Cz>JNFXzf5Np0+{*R6r2i`SPm}+Lxqlz`e@^;00IOfm zajCzZ#D9$Y0{MRg_)o!qjCcn4Tfp7T{inFz3;Y(Y-yp5Z{g1iNf?wg<=eir*r+M}t za`gfK8rKx~6xSb;_b%ceB<(5UKM8yb_sp#p|yp&p+T<<-3JDzY^lUi#%<_{|WKe01t4V29IIx zet`QP*Pn5TPmhuINv@ko`_J6Jp6A3T%Kv8W>^He5!T$u;DsjzuwNKjex44Vt7Prd{n=lAkV9T zKh5UADMDt^x_>XhF5BO8uzlrATpFuCA^tY-{}}j>sPm)5HJ%l4|BCoI;5{zMO|^3vocLDt z{tVZ9fj_}BALlwl`p*!*mHS!JevrG$y`MD6s>iv8!F@u{alIeBWYHz=U&~$NwZZjT zVCnfQ+<%3*X^*P{Q1%D1$hVt#i2e?1L^>4UT{vK(Ma@|9`ne-Ffe}Vg}xqgXDV7?*NsdUry#rYFyqA36K>P&vX0ERTr!?`!3V89?PlEpt z@Rz{95BMX%ALkMeXg;@r|2g8lT<-^`@mD?ni8MX`v&8==d5T<`_p{*Nz@@SJF!#5S z2hed-_gxd0?1Nwz$@Y=WbUWAGTs>S_t^(IS*T=b1DPS(?rWA#wC?thJmBQdjo!~mf zbsJX~S2x$|xZdpkhW=7!T2cL8V}E`_ z{k_Vb(%ZdyiK0fjf3sIVI^h34(j+@3MVs`dZwdU`5hZ=2<>{v1{$Iaa5)Jq!&uu)b z_crtfiRwuFHX`X0q|Nc7h1$1e`Sfze*#yqN`R9LI1=?A8p(kVHP5!`j^y346iE_KK zqEq#LHU0*R=+Hx(y6czPaVPmj$>c8{g`aPDsr@?3ywuy$T2G}ZSMPQDA0ZIs^viXk z{2FxHCQldFo2~wt2(MAmn<9ZO{tb^J`Cb}*<97IQyGZ$ZV@Gd~Z^MbvZ|uF~ay1|D z?86Po@(xltrm^I!#v{w<>dhp*`{Lh$y7n^~pZ~>wr!uy7`vWP>|Nrm*a}@Z00F4-g Ai~s-t literal 0 HcmV?d00001 diff --git a/Assets/Plugins/TriLib/Debug/ICSharpCode.SharpZipLib.dll.meta b/Assets/Plugins/TriLib/Debug/ICSharpCode.SharpZipLib.dll.meta new file mode 100644 index 00000000..22896888 --- /dev/null +++ b/Assets/Plugins/TriLib/Debug/ICSharpCode.SharpZipLib.dll.meta @@ -0,0 +1,40 @@ +fileFormatVersion: 2 +guid: 1677d96caecc54a479a901472beec0e7 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 157548 + packageName: TriLib 2 - Model Loading Package + packageVersion: 2.5.5 + assetPath: Assets/Plugins/TriLib/Debug/ICSharpCode.SharpZipLib.dll + uploadId: 752923 diff --git a/Assets/Plugins/TriLib/Debug/IxMilia.ThreeMf.dll b/Assets/Plugins/TriLib/Debug/IxMilia.ThreeMf.dll new file mode 100644 index 0000000000000000000000000000000000000000..c40ec3a7ab203b9b746db801c005617f5d197a63 GIT binary patch literal 68096 zcmce<34D~*^*4T=XJ(#RvOto_PC`Nmj7bPf06|g1Zj^l&moOv)1d~j7CP5a7K`d2^ zR)t#YR#4QoTD3~8TNT_|mDZ&$wQf+Cimg_yZLOvFe$To0nI(z#_x|6{@1J(gJ?GqW z?>+b2bI)C#=fT;_uOJr@x$*nzE28_6@?X8cZw5Wc&K&$;Chhb8ru=?m)^Exet!ass zb=c9>cDSvqDcs&3?JQdvDYLuU%UasYrp;Yg))sA!)MjJ^hU%*4O(&XVxTyKwp*x+{ z4$+XZG-DKzX%Jb8duysV13)zv-xV zE+eS-4mL#ZzZC|hgZJ